PageSourceSearch

https://curvy-kinetic-arc-build.base44.app/static/i18n-pkgydE_c.js

js curvy-kinetic-arc-build.base44.app collected 2026-10-03 03:12:56 UTC 277,887 bytes, 4 lines download raw bytes

vendor: 44,556 bytes, lines 1-2
1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["static/momentLocaleSync-BTkvkz6G.js","static/rolldown-runtime-C0FnF6B9.js","static/moment-CbrR2L3o.js"])))=>i.map(i=>d[i]);
2import{t as e}from"./preload-helper-BZ1Pz5am.js";import{a as t,n,r}from"./errorReporting-C8KVtz7O.js";var i=e=>typeof e==`string`,a=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},o=e=>e==null?``:``+e,s=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},c=/###/g,l=e=>e&&e.indexOf(`###`)>-1?e.replace(c,`.`):e,u=e=>!e||i(e),d=(e,t,n)=>{let r=i(t)?t.split(`.`):t,a=0;for(;a<r.length-1;){if(u(e))return{};let t=l(r[a]);!e[t]&&n&&(e[t]=new n),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++a}return u(e)?{}:{obj:e,k:l(r[a])}},f=(e,t,n)=>{let{obj:r,k:i}=d(e,t,Object);if(r!==void 0||t.length===1){r[i]=n;return}let a=t[t.length-1],o=t.slice(0,t.length-1),s=d(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=d(e,o,Object),s&&s.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},p=(e,t,n,r)=>{let{obj:i,k:a}=d(e,t,Object);i[a]=i[a]||[],i[a].push(n)},m=(e,t)=>{let{obj:n,k:r}=d(e,t);if(n)return n[r]},h=(e,t,n)=>{let r=m(e,n);return r===void 0?m(t,n):r},g=(e,t,n)=>{for(let r in t)r!==`__proto__`&&r!==`constructor`&&(r in e?i(e[r])||e[r]instanceof String||i(t[r])||t[r]instanceof String?n&&(e[r]=t[r]):g(e[r],t[r],n):e[r]=t[r]);return e},_=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),v={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`,"/":`&#x2F;`},y=e=>i(e)?e.replace(/[&<>"'\/]/g,e=>v[e]):e,b=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}},ee=[` `,`,`,`?`,`!`,`;`],te=new b(20),ne=(e,t,n)=>{t||=``,n||=``;let r=ee.filter(e=>t.indexOf(e)<0&&n.indexOf(e)<0);if(r.length===0)return!0;let i=te.getRegExp(`(${r.map(e=>e===`?`?`\\?`:e).join(`|`)})`),a=!i.test(e);if(!a){let t=e.indexOf(n);t>0&&!i.test(e.substring(0,t))&&(a=!0)}return a},x=function(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:`.`;if(!e)return;if(e[t])return e[t];let r=t.split(n),i=e;for(let e=0;e<r.length;){if(!i||typeof i!=`object`)return;let t,a=``;for(let o=e;o<r.length;++o)if(o!==e&&(a+=n),a+=r[o],t=i[a],t!==void 0){if([`string`,`number`,`boolean`].indexOf(typeof t)>-1&&o<r.length-1)continue;e+=o-e+1;break}i=t}return i},S=e=>e&&e.replace(`_`,`-`),re={type:`logger`,log(e){this.output(`log`,e)},warn(e){this.output(`warn`,e)},error(e){this.output(`error`,e)},output(e,t){console&&console[e]}},C=new class e{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||re,this.options=t,this.debug=t.debug}log(){var e=[...arguments];return this.forward(e,`log`,``,!0)}warn(){var e=[...arguments];return this.forward(e,`warn`,``,!0)}error(){var e=[...arguments];return this.forward(e,`error`,``)}deprecate(){var e=[...arguments];return this.forward(e,`warn`,`WARNING DEPRECATED: `,!0)}forward(e,t,n,r){return r&&!this.debug?null:(i(e[0])&&(e[0]=`${n}${this.prefix} ${e[0]}`),this.logger[t](e))}create(t){return new e(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t||=this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},w=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}emit(e){var t=[...arguments].slice(1);this.observers[e]&&Array.from(this.observers[e].entries()).forEach(e=>{let[n,r]=e;for(let e=0;e<r;e++)n(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(n=>{let[r,i]=n;for(let n=0;n<i;n++)r.apply(r,[e,...t])})}},T=class extends w{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){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=r.keySeparator===void 0?this.options.keySeparator:r.keySeparator,o=r.ignoreJSONStructure===void 0?this.options.ignoreJSONStructure:r.ignoreJSONStructure,s;e.indexOf(`.`)>-1?s=e.split(`.`):(s=[e,t],n&&(Array.isArray(n)?s.push(...n):i(n)&&a?s.push(...n.split(a)):s.push(n)));let c=m(this.data,s);return!c&&!t&&!n&&e.indexOf(`.`)>-1&&(e=s[0],t=s[1],n=s.slice(2).join(`.`)),c||!o||!i(n)?c:x(this.data&&this.data[e]&&this.data[e][t],n,a)}addResource(e,t,n,r){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1},a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=[e,t];n&&(o=o.concat(a?n.split(a):n)),e.indexOf(`.`)>-1&&(o=e.split(`.`),r=t,t=o[1]),this.addNamespaces(t),f(this.data,o,r),i.silent||this.emit(`added`,e,t,n,r)}addResources(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(let r in n)(i(n[r])||Array.isArray(n[r]))&&this.addResource(e,t,r,n[r],{silent:!0});r.silent||this.emit(`added`,e,t,n)}addResourceBundle(e,t,n,r,i){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},o=[e,t];e.indexOf(`.`)>-1&&(o=e.split(`.`),r=n,n=t,t=o[1]),this.addNamespaces(t);let s=m(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?g(s,n,i):s={...s,...n},f(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}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||=this.options.defaultNS,this.options.compatibilityAPI===`v1`?{...this.getResource(e,t)}:this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},E={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(e=>{this.processors[e]&&(t=this.processors[e].process(t,n,r,i))}),t}},D={},O=class e extends w{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),s([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=C.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;let n=this.resolve(e,t);return n&&n.res!==void 0}extractFromKey(e,t){let n=t.nsSeparator===void 0?this.options.nsSeparator:t.nsSeparator;n===void 0&&(n=`:`);let r=t.keySeparator===void 0?this.options.keySeparator:t.keySeparator,a=t.ns||this.options.defaultNS||[],o=n&&e.indexOf(n)>-1,s=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!ne(e,n,r);if(o&&!s){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:i(a)?[a]:a};let o=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(o[0])>-1)&&(a=o.shift()),e=o.join(r)}return{key:e,namespaces:i(a)?[a]:a}}translate(t,n,r){if(typeof n!=`object`&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n==`object`&&(n={...n}),n||={},t==null)return``;Array.isArray(t)||(t=[String(t)]);let a=n.returnDetails===void 0?this.options.returnDetails:n.returnDetails,o=n.keySeparator===void 0?this.options.keySeparator:n.keySeparator,{key:s,namespaces:c}=this.extractFromKey(t[t.length-1],n),l=c[c.length-1],u=n.lng||this.language,d=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(u&&u.toLowerCase()===`cimode`){if(d){let e=n.nsSeparator||this.options.nsSeparator;return a?{res:`${l}${e}${s}`,usedKey:s,exactUsedKey:s,usedLng:u,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:`${l}${e}${s}`}return a?{res:s,usedKey:s,exactUsedKey:s,usedLng:u,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:s}let f=this.resolve(t,n),p=f&&f.res,m=f&&f.usedKey||s,h=f&&f.exactUsedKey||s,g=Object.prototype.toString.apply(p),_=[`[object Number]`,`[object Function]`,`[object RegExp]`],v=n.joinArrays===void 0?this.options.joinArrays:n.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject,b=!i(p)&&typeof p!=`boolean`&&typeof p!=`number`;if(y&&p&&b&&_.indexOf(g)<0&&!(i(v)&&Array.isArray(p))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(`accessing an object - but returnObjects options is not enabled!`);let e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(m,p,{...n,ns:c}):`key '${s} (${this.language})' returned an object instead of string.`;return a?(f.res=e,f.usedParams=this.getUsedParamsDetails(n),f):e}if(o){let e=Array.isArray(p),t=e?[]:{},r=e?h:m;for(let e in p)if(Object.prototype.hasOwnProperty.call(p,e)){let i=`${r}${o}${e}`;t[e]=this.translate(i,{...n,joinArrays:!1,ns:c}),t[e]===i&&(t[e]=p[e])}p=t}}else if(y&&i(v)&&Array.isArray(p))p=p.join(v),p&&=this.extendTranslation(p,t,n,r);else{let a=!1,c=!1,d=n.count!==void 0&&!i(n.count),m=e.hasDefaultValue(n),h=d?this.pluralResolver.getSuffix(u,n.count,n):``,g=n.ordinal&&d?this.pluralResolver.getSuffix(u,n.count,{ordinal:!1}):``,_=d&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),v=_&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${h}`]||n[`defaultValue${g}`]||n.defaultValue;!this.isValidLookup(p)&&m&&(a=!0,p=v),this.isValidLookup(p)||(c=!0,p=s);let y=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&c?void 0:p,b=m&&v!==p&&this.options.updateMissing;if(c||a||b){if(this.logger.log(b?`updateKey`:`missingKey`,u,l,s,b?v:p),o){let e=this.resolve(s,{...n,keySeparator:!1});e&&e.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 e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(n.lng||this.language):e.push(n.lng||this.language);let r=(e,t,r)=>{let i=m&&r!==p?r:y;this.options.missingKeyHandler?this.options.missingKeyHandler(e,l,t,i,b,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(e,l,t,i,b,n),this.emit(`missingKey`,e,l,t,p)};this.options.saveMissing&&(this.options.saveMissingPlurals&&d?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,n);_&&n[`defaultValue${this.options.pluralSeparator}zero`]&&t.indexOf(`${this.options.pluralSeparator}zero`)<0&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{r([e],s+t,n[`defaultValue${t}`]||v)})}):r(e,s,v))}p=this.extendTranslation(p,t,n,f,r),c&&p===s&&this.options.appendNamespaceToMissingKey&&(p=`${l}:${s}`),(c||a)&&this.options.parseMissingKeyHandler&&(p=this.options.compatibilityAPI===`v1`?this.options.parseMissingKeyHandler(p):this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${s}`:s,a?p:void 0))}return a?(f.res=p,f.usedParams=this.getUsedParamsDetails(n),f):p}extendTranslation(e,t,n,r,a){var o=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...n},n.lng||this.language||r.usedLng,r.usedNS,r.usedKey,{resolved:r});else if(!n.skipInterpolation){n.interpolation&&this.interpolator.init({...n,interpolation:{...this.options.interpolation,...n.interpolation}});let s=i(e)&&(n&&n.interpolation&&n.interpolation.skipOnVariables!==void 0?n.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables),c;if(s){let t=e.match(this.interpolator.nestingRegexp);c=t&&t.length}let l=n.replace&&!i(n.replace)?n.replace:n;if(this.options.interpolation.defaultVariables&&(l={...this.options.interpolation.defaultVariables,...l}),e=this.interpolator.interpolate(e,l,n.lng||this.language||r.usedLng,n),s){let t=e.match(this.interpolator.nestingRegexp),r=t&&t.length;c<r&&(n.nest=!1)}!n.lng&&this.options.compatibilityAPI!==`v1`&&r&&r.res&&(n.lng=this.language||r.usedLng),n.nest!==!1&&(e=this.interpolator.nest(e,function(){var e=[...arguments];return a&&a[0]===e[0]&&!n.context?(o.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${t[0]}`),null):o.translate(...e,t)},n)),n.interpolation&&this.interpolator.reset()}let s=n.postProcess||this.options.postProcess,c=i(s)?[s]:s;return e!=null&&c&&c.length&&n.applyPostProcessor!==!1&&(e=E.handle(c,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...r,usedParams:this.getUsedParamsDetails(n)},...n}:n,this)),e}resolve(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n,r,a,o,s;return i(e)&&(e=[e]),e.forEach(e=>{if(this.isValidLookup(n))return;let c=this.extractFromKey(e,t),l=c.key;r=l;let u=c.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));let d=t.count!==void 0&&!i(t.count),f=d&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),p=t.context!==void 0&&(i(t.context)||typeof t.context==`number`)&&t.context!==``,m=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);u.forEach(e=>{this.isValidLookup(n)||(s=e,!D[`${m[0]}-${e}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(s)&&(D[`${m[0]}-${e}`]=!0,this.logger.warn(`key "${r}" for languages "${m.join(`, `)}" won't get resolved as namespace "${s}" 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!!!`)),m.forEach(r=>{if(this.isValidLookup(n))return;o=r;let i=[l];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(i,l,r,e,t);else{let e;d&&(e=this.pluralResolver.getSuffix(r,t.count,t));let n=`${this.options.pluralSeparator}zero`,a=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(d&&(i.push(l+e),t.ordinal&&e.indexOf(a)===0&&i.push(l+e.replace(a,this.options.pluralSeparator)),f&&i.push(l+n)),p){let r=`${l}${this.options.contextSeparator}${t.context}`;i.push(r),d&&(i.push(r+e),t.ordinal&&e.indexOf(a)===0&&i.push(r+e.replace(a,this.options.pluralSeparator)),f&&i.push(r+n))}}let s;for(;s=i.pop();)this.isValidLookup(n)||(a=s,n=this.getResource(r,e,s,t))}))})}),{res:n,usedKey:r,exactUsedKey:a,usedLng:o,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e===``)}getResource(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=[`defaultValue`,`ordinal`,`context`,`replace`,`lng`,`lngs`,`fallbackLng`,`ns`,`keySeparator`,`nsSeparator`,`returnObjects`,`returnDetails`,`joinArrays`,`postProcess`,`interpolation`],n=e.replace&&!i(e.replace),r=n?e.replace:e;if(n&&e.count!==void 0&&(r.count=e.count),this.options.interpolation.defaultVariables&&(r={...this.options.interpolation.defaultVariables,...r}),!n){r={...r};for(let e of t)delete r[e]}return r}static hasDefaultValue(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&t.substring(0,12)===`defaultValue`&&e[t]!==void 0)return!0;return!1}},k=e=>e.charAt(0).toUpperCase()+e.slice(1),ie=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=C.create(`languageUtils`)}getScriptPartFromCode(e){if(e=S(e),!e||e.indexOf(`-`)<0)return null;let t=e.split(`-`);return t.length===2||(t.pop(),t[t.length-1].toLowerCase()===`x`)?null:this.formatLanguageCode(t.join(`-`))}getLanguagePartFromCode(e){if(e=S(e),!e||e.indexOf(`-`)<0)return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(i(e)&&e.indexOf(`-`)>-1){if(typeof Intl<`u`&&Intl.getCanonicalLocales!==void 0)try{let t=Intl.getCanonicalLocales(e)[0];if(t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t)return t}catch{}let t=[`hans`,`hant`,`latn`,`cyrl`,`cans`,`mong`,`arab`],n=e.split(`-`);return this.options.lowerCaseLng?n=n.map(e=>e.toLowerCase()):n.length===2?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=k(n[1].toLowerCase()))):n.length===3&&(n[0]=n[0].toLowerCase(),n[1].length===2&&(n[1]=n[1].toUpperCase()),n[0]!==`sgn`&&n[2].length===2&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=k(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=k(n[2].toLowerCase()))),n.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(e=>{if(t)return;let n=this.formatLanguageCode(e);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(e=>{if(t)return;let n=this.getLanguagePartFromCode(e);if(this.isSupportedCode(n))return t=n;t=this.options.supportedLngs.find(e=>{if(e===n||!(e.indexOf(`-`)<0&&n.indexOf(`-`)<0)&&(e.indexOf(`-`)>0&&n.indexOf(`-`)<0&&e.substring(0,e.indexOf(`-`))===n||e.indexOf(n)===0&&n.length>1))return e})}),t||=this.getFallbackCodes(this.options.fallbackLng)[0],t}getFallbackCodes(e,t){if(!e)return[];if(typeof e==`function`&&(e=e(t)),i(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let n=e[t];return n||=e[this.getScriptPartFromCode(t)],n||=e[this.formatLanguageCode(t)],n||=e[this.getLanguagePartFromCode(t)],n||=e.default,n||[]}toResolveHierarchy(e,t){let n=this.getFallbackCodes(t||this.options.fallbackLng||[],e),r=[],a=e=>{e&&(this.isSupportedCode(e)?r.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return i(e)&&(e.indexOf(`-`)>-1||e.indexOf(`_`)>-1)?(this.options.load!==`languageOnly`&&a(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&a(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&a(this.getLanguagePartFromCode(e))):i(e)&&a(this.formatLanguageCode(e)),n.forEach(e=>{r.indexOf(e)<0&&a(this.formatLanguageCode(e))}),r}},ae=[{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`.split(`.`),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}],oe={1:e=>Number(e>1),2:e=>Number(e!=1),3:e=>0,4:e=>Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2),5:e=>Number(e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5),6:e=>Number(e==1?0:e>=2&&e<=4?1:2),7:e=>Number(e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2),8:e=>Number(e==1?0:e==2?1:e!=8&&e!=11?2:3),9:e=>Number(e>=2),10:e=>Number(e==1?0:e==2?1:e<7?2:e<11?3:4),11:e=>Number(e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3),12:e=>Number(e%10!=1||e%100==11),13:e=>Number(e!==0),14:e=>Number(e==1?0:e==2?1:e==3?2:3),15:e=>Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2),16:e=>Number(e%10==1&&e%100!=11?0:e===0?2:1),17:e=>Number(e==1||e%10==1&&e%100!=11?0:1),18:e=>Number(e==0?0:e==1?1:2),19:e=>Number(e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3),20:e=>Number(e==1?0:e==0||e%100>0&&e%100<20?1:2),21:e=>Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0),22:e=>Number(e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3)},se=[`v1`,`v2`,`v3`],ce=[`v4`],le={zero:0,one:1,two:2,few:3,many:4,other:5},ue=()=>{let e={};return ae.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:oe[t.fc]}})}),e},de=class{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=C.create(`pluralResolver`),(!this.options.compatibilityJSON||ce.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=ue(),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()){let n=S(e===`dev`?`en`:e),r=t.ordinal?`ordinal`:`cardinal`,i=JSON.stringify({cleanedCode:n,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(!e.match(/-|_/))return;let n=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(n,t)}return this.pluralRulesCache[i]=a,a}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=this.getRule(e,t);return this.shouldUseIntlApi()?n&&n.resolvedOptions().pluralCategories.length>1:n&&n.numbers.length>1}getPluralFormsOfKey(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(e,n).map(e=>`${t}${e}`)}getSuffixes(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=this.getRule(e,t);return n?this.shouldUseIntlApi()?n.resolvedOptions().pluralCategories.sort((e,t)=>le[e]-le[t]).map(e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:``}${e}`):n.numbers.map(n=>this.getSuffix(e,n,t)):[]}getSuffix(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=this.getRule(e,n);return r?this.shouldUseIntlApi()?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:``}${r.select(t)}`:this.getSuffixRetroCompatible(r,t):(this.logger.warn(`no plural rule found for: ${e}`),``)}getSuffixRetroCompatible(e,t){let n=e.noAbs?e.plurals(t):e.plurals(Math.abs(t)),r=e.numbers[n];this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1&&(r===2?r=`plural`:r===1&&(r=``));let i=()=>this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString();return this.options.compatibilityJSON===`v1`?r===1?``:typeof r==`number`?`_plural_${r.toString()}`:i():this.options.compatibilityJSON===`v2`||this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1?i():this.options.prepend&&n.toString()?this.options.prepend+n.toString():n.toString()}shouldUseIntlApi(){return!se.includes(this.options.compatibilityJSON)}},A=function(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:`.`,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=h(e,t,n);return!o&&a&&i(n)&&(o=x(e,n,r),o===void 0&&(o=x(t,n,r))),o},j=e=>e.replace(/\$/g,`$$$$`),fe=class{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=C.create(`interpolator`),this.options=e,this.format=e.interpolation&&e.interpolation.format||(e=>e),this.init(e)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:m,nestingOptionsSeparator:h,maxReplaces:g,alwaysFormat:v}=e.interpolation;this.escape=t===void 0?y:t,this.escapeValue=n===void 0||n,this.useRawValueToEscape=r!==void 0&&r,this.prefix=i?_(i):a||`{{`,this.suffix=o?_(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u||`-`,this.unescapeSuffix=this.unescapePrefix?``:l||``,this.nestingPrefix=d?_(d):f||_(`$t(`),this.nestingSuffix=p?_(p):m||_(`)`),this.nestingOptionsSeparator=h||`,`,this.maxReplaces=g||1e3,this.alwaysFormat=v!==void 0&&v,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e&&e.source===t?(e.lastIndex=0,e):new RegExp(t,`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,n,r){let a,s,c,l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=e=>{if(e.indexOf(this.formatSeparator)<0){let i=A(t,l,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(i,void 0,n,{...r,...t,interpolationkey:e}):i}let i=e.split(this.formatSeparator),a=i.shift().trim(),o=i.join(this.formatSeparator).trim();return this.format(A(t,l,a,this.options.keySeparator,this.options.ignoreJSONStructure),o,n,{...r,...t,interpolationkey:a})};this.resetRegExp();let d=r&&r.missingInterpolationHandler||this.options.missingInterpolationHandler,f=r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>j(e)},{regex:this.regexp,safeValue:e=>this.escapeValue?j(this.escape(e)):j(e)}].forEach(t=>{for(c=0;a=t.regex.exec(e);){let n=a[1].trim();if(s=u(n),s===void 0){if(typeof d==`function`){let t=d(e,a,r);s=i(t)?t:``}else if(r&&Object.prototype.hasOwnProperty.call(r,n))s=``;else if(f){s=a[0];continue}else this.logger.warn(`missed to pass in variable ${n} for interpolating ${e}`),s=``}else!i(s)&&!this.useRawValueToEscape&&(s=o(s));let l=t.safeValue(s);if(e=e.replace(a[0],l),f?(t.regex.lastIndex+=s.length,t.regex.lastIndex-=a[0].length):t.regex.lastIndex=0,c++,c>=this.maxReplaces)break}}),e}nest(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r,a,s,c=(e,t)=>{let n=this.nestingOptionsSeparator;if(e.indexOf(n)<0)return e;let r=e.split(RegExp(`${n}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,s);let a=i.match(/'/g),o=i.match(/"/g);(a&&a.length%2==0&&!o||o.length%2!=0)&&(i=i.replace(/'/g,`"`));try{s=JSON.parse(i),t&&(s={...t,...s})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return s.defaultValue&&s.defaultValue.indexOf(this.prefix)>-1&&delete s.defaultValue,e};for(;r=this.nestingRegexp.exec(e);){let l=[];s={...n},s=s.replace&&!i(s.replace)?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let u=!1;if(r[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(r[1])){let e=r[1].split(this.formatSeparator).map(e=>e.trim());r[1]=e.shift(),l=e,u=!0}if(a=t(c.call(this,r[1].trim(),s),s),a&&r[0]===e&&!i(a))return a;i(a)||(a=o(a)),a||=(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),``),u&&(a=l.reduce((e,t)=>this.format(e,t,n.lng,{...n,interpolationkey:r[1].trim()}),a.trim())),e=e.replace(r[0],a),this.regexp.lastIndex=0}return e}},pe=e=>{let t=e.toLowerCase().trim(),n={};if(e.indexOf(`(`)>-1){let r=e.split(`(`);t=r[0].toLowerCase().trim();let i=r[1].substring(0,r[1].length-1);t===`currency`&&i.indexOf(`:`)<0?n.currency||=i.trim():t===`relativetime`&&i.indexOf(`:`)<0?n.range||=i.trim():i.split(`;`).forEach(e=>{if(e){let[t,...r]=e.split(`:`),i=r.join(`:`).trim().replace(/^'+|'+$/g,``),a=t.trim();n[a]||(n[a]=i),i===`false`&&(n[a]=!1),i===`true`&&(n[a]=!0),isNaN(i)||(n[a]=parseInt(i,10))}})}return{formatName:t,formatOptions:n}},M=e=>{let t={};return(n,r,i)=>{let a=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(a={...a,[i.interpolationkey]:void 0});let o=r+JSON.stringify(a),s=t[o];return s||(s=e(S(r),i),t[o]=s),s(n)}},me=class{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=C.create(`formatter`),this.options=e,this.formats={number:M((e,t)=>{let n=new Intl.NumberFormat(e,{...t});return e=>n.format(e)}),currency:M((e,t)=>{let n=new Intl.NumberFormat(e,{...t,style:`currency`});return e=>n.format(e)}),datetime:M((e,t)=>{let n=new Intl.DateTimeFormat(e,{...t});return e=>n.format(e)}),relativetime:M((e,t)=>{let n=new Intl.RelativeTimeFormat(e,{...t});return e=>n.format(e,t.range||`day`)}),list:M((e,t)=>{let n=new Intl.ListFormat(e,{...t});return e=>n.format(e)})},this.init(e)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};this.formatSeparator=t.interpolation.formatSeparator||`,`}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=M(t)}format(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},i=t.split(this.formatSeparator);if(i.length>1&&i[0].indexOf(`(`)>1&&i[0].indexOf(`)`)<0&&i.find(e=>e.indexOf(`)`)>-1)){let e=i.findIndex(e=>e.indexOf(`)`)>-1);i[0]=[i[0],...i.splice(1,e)].join(this.formatSeparator)}return i.reduce((e,t)=>{let{formatName:i,formatOptions:a}=pe(t);if(this.formats[i]){let t=e;try{let o=r&&r.formatParams&&r.formatParams[r.interpolationkey]||{},s=o.locale||o.lng||r.locale||r.lng||n;t=this.formats[i](e,s,{...a,...r,...o})}catch(e){this.logger.warn(e)}return t}return this.logger.warn(`there was no format function for ${i}`),e},e)}},he=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},ge=class extends w{constructor(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=C.create(`backendConnector`),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(n,r.backend,r)}queueLoad(e,t,n,r){let i={},a={},o={},s={};return e.forEach(e=>{let r=!0;t.forEach(t=>{let o=`${e}|${t}`;!n.reload&&this.store.hasResourceBundle(e,t)?this.state[o]=2:this.state[o]<0||(this.state[o]===1?a[o]===void 0&&(a[o]=!0):(this.state[o]=1,r=!1,a[o]===void 0&&(a[o]=!0),i[o]===void 0&&(i[o]=!0),s[t]===void 0&&(s[t]=!0)))}),r||(o[e]=!0)}),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(e,t,n){let r=e.split(`|`),i=r[0],a=r[1];t&&this.emit(`failedLoading`,i,a,t),!t&&n&&this.store.addResourceBundle(i,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);let o={};this.queue.forEach(n=>{p(n.loaded,[i],a),he(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,a=arguments.length>5?arguments[5]:void 0;if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read.call(this,e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=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.`),r&&r();i(e)&&(e=this.languageUtils.toResolveHierarchy(e)),i(t)&&(t=[t]);let a=this.queueLoad(e,t,n,r);if(!a.toLoad.length)return a.pending.length||r(),null;a.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:``,n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},o=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 "${n}" 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(n!=null&&n!==``){if(this.backend&&this.backend.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}!e||!e[0]||this.store.addResource(e[0],t,n,r)}}},N=()=>({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:e=>{let t={};if(typeof e[1]==`object`&&(t=e[1]),i(e[1])&&(t.defaultValue=e[1]),i(e[2])&&(t.tDescription=e[2]),typeof e[2]==`object`||typeof e[3]==`object`){let n=e[3]||e[2];Object.keys(n).forEach(e=>{t[e]=n[e]})}return t},interpolation:{escapeValue:!0,format:e=>e,prefix:`{{`,suffix:`}}`,formatSeparator:`,`,unescapePrefix:`-`,nestingPrefix:`$t(`,nestingSuffix:`)`,nestingOptionsSeparator:`,`,maxReplaces:1e3,skipOnVariables:!0}}),P=e=>(i(e.ns)&&(e.ns=[e.ns]),i(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),i(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf(`cimode`)<0&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),e),F=()=>{},_e=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},I=class e extends w{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;if(super(),this.options=P(e),this.services={},this.logger=C,this.modules={external:[]},_e(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]:{},n=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof t==`function`&&(n=t,t={}),!t.defaultNS&&t.defaultNS!==!1&&t.ns&&(i(t.ns)?t.defaultNS=t.ns:t.ns.indexOf(`translation`)<0&&(t.defaultNS=t.ns[0]));let r=N();this.options={...r,...this.options,...P(t)},this.options.compatibilityAPI!==`v1`&&(this.options.interpolation={...r.interpolation,...this.options.interpolation}),t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator);let o=e=>e?typeof e==`function`?new e:e:null;if(!this.options.isClone){this.modules.logger?C.init(o(this.modules.logger),this.options):C.init(null,this.options);let t;this.modules.formatter?t=this.modules.formatter:typeof Intl<`u`&&(t=me);let n=new ie(this.options);this.store=new T(this.options.resources,this.options);let i=this.services;i.logger=C,i.resourceStore=this.store,i.languageUtils=n,i.pluralResolver=new de(n,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),t&&(!this.options.interpolation.format||this.options.interpolation.format===r.interpolation.format)&&(i.formatter=o(t),i.formatter.init(i,this.options),this.options.interpolation.format=i.formatter.format.bind(i.formatter)),i.interpolator=new fe(this.options),i.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},i.backendConnector=new ge(o(this.modules.backend),i.resourceStore,i,this.options),i.backendConnector.on(`*`,function(t){var n=[...arguments].slice(1);e.emit(t,...n)}),this.modules.languageDetector&&(i.languageDetector=o(this.modules.languageDetector),i.languageDetector.init&&i.languageDetector.init(i,this.options.detection,this.options)),this.modules.i18nFormat&&(i.i18nFormat=o(this.modules.i18nFormat),i.i18nFormat.init&&i.i18nFormat.init(this)),this.translator=new O(this.services,this.options),this.translator.on(`*`,function(t){var n=[...arguments].slice(1);e.emit(t,...n)}),this.modules.external.forEach(e=>{e.init&&e.init(this)})}if(this.format=this.options.interpolation.format,n||=F,this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&e[0]!==`dev`&&(this.options.lng=e[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(t=>{this[t]=function(){return e.store[t](...arguments)}}),[`addResource`,`addResources`,`addResourceBundle`,`removeResourceBundle`].forEach(t=>{this[t]=function(){return e.store[t](...arguments),e}});let s=a(),c=()=>{let e=(e,t)=>{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),s.resolve(t),n(e,t)};if(this.languages&&this.options.compatibilityAPI!==`v1`&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initImmediate?c():setTimeout(c,0),s}loadResources(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:F,n=i(e)?e:this.language;if(typeof e==`function`&&(t=e),!this.options.resources||this.options.partialBundledLanguages){if(n&&n.toLowerCase()===`cimode`&&(!this.options.preload||this.options.preload.length===0))return t();let e=[],r=t=>{t&&t!==`cimode`&&this.services.languageUtils.toResolveHierarchy(t).forEach(t=>{t!==`cimode`&&e.indexOf(t)<0&&e.push(t)})};n?r(n):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(e=>r(e)),this.options.preload&&this.options.preload.forEach(e=>r(e)),this.services.backendConnector.load(e,this.options.ns,e=>{!e&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),t(e)})}else t(null)}reloadResources(e,t,n){let r=a();return typeof e==`function`&&(n=e,e=void 0),typeof t==`function`&&(n=t,t=void 0),e||=this.languages,t||=this.options.ns,n||=F,this.services.backendConnector.reload(e,t,e=>{r.resolve(),n(e)}),r}use(e){if(!e)throw Error(`You are passing an undefined module! Please check the object you are passing to i18next.use()`);if(!e.type)throw 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`&&E.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 e=0;e<this.languages.length;e++){let t=this.languages[e];if(!([`cimode`,`dev`].indexOf(t)>-1)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}}changeLanguage(e,t){var n=this;this.isLanguageChangingTo=e;let r=a();this.emit(`languageChanging`,e);let o=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},s=(e,i)=>{i?(o(i),this.translator.changeLanguage(i),this.isLanguageChangingTo=void 0,this.emit(`languageChanged`,i),this.logger.log(`languageChanged`,i)):this.isLanguageChangingTo=void 0,r.resolve(function(){return n.t(...arguments)}),t&&t(e,function(){return n.t(...arguments)})},c=t=>{!e&&!t&&this.services.languageDetector&&(t=[]);let n=i(t)?t:this.services.languageUtils.getBestMatchFromCodes(t);n&&(this.language||o(n),this.translator.language||this.translator.changeLanguage(n),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(n)),this.loadResources(n,e=>{s(e,n)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?c(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(c):this.services.languageDetector.detect(c):c(e),r}getFixedT(e,t,n){var r=this;let a=function(e,t){let i;if(typeof t!=`object`){var o=[...arguments].slice(2);i=r.options.overloadTranslationOptionHandler([e,t].concat(o))}else i={...t};i.lng=i.lng||a.lng,i.lngs=i.lngs||a.lngs,i.ns=i.ns||a.ns,i.keyPrefix!==``&&(i.keyPrefix=i.keyPrefix||n||a.keyPrefix);let s=r.options.keySeparator||`.`,c;return c=i.keyPrefix&&Array.isArray(e)?e.map(e=>`${i.keyPrefix}${s}${e}`):i.keyPrefix?`${i.keyPrefix}${s}${e}`:e,r.t(c,i)};return i(e)?a.lng=e:a.lngs=e,a.ns=t,a.keyPrefix=n,a}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;
2if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,t){let n=a();return this.options.ns?(i(e)&&(e=[e]),e.forEach(e=>{this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}loadLanguages(e,t){let n=a();i(e)&&(e=[e]);let r=this.options.preload||[],o=e.filter(e=>r.indexOf(e)<0&&this.services.languageUtils.isSupportedCode(e));return o.length?(this.options.preload=r.concat(o),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}dir(e){if(e||=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language),!e)return`rtl`;let 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`.split(`.`),n=this.services&&this.services.languageUtils||new ie(N());return t.indexOf(n.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf(`-arab`)>1?`rtl`:`ltr`}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new e(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:F,r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);return(t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new T(this.store.data,i),a.services.resourceStore=a.store),a.translator=new O(a.services,i),a.translator.on(`*`,function(e){var t=[...arguments].slice(1);a.emit(e,...t)}),a.init(i,n),a.translator.options=i,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}},L=I.createInstance();L.createInstance=I.createInstance,L.createInstance,L.dir,L.init,L.loadResources,L.reloadResources,L.use,L.changeLanguage,L.getFixedT,L.t,L.exists,L.setDefaultNamespace,L.hasLoadedNamespace,L.loadNamespaces,L.loadLanguages;var ve=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,ye={"&amp;":`&`,"&#38;":`&`,"&lt;":`<`,"&#60;":`<`,"&gt;":`>`,"&#62;":`>`,"&apos;":`'`,"&#39;":`'`,"&quot;":`"`,"&#34;":`"`,"&nbsp;":` `,"&#160;":` `,"&copy;":`©`,"&#169;":`©`,"&reg;":`®`,"&#174;":`®`,"&hellip;":`…`,"&#8230;":`…`,"&#x2F;":`/`,"&#47;":`/`},be=e=>ye[e],R={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:e=>e.replace(ve,be)},xe=(e={})=>{R={...R,...e}},Se=()=>R,z,Ce=e=>{z=e},we=()=>z,Te={type:`3rdParty`,init(e){xe(e.options.react),Ce(e)}},{slice:Ee,forEach:De}=[];function Oe(e){return De.call(Ee.call(arguments,1),t=>{if(t)for(let n in t)e[n]===void 0&&(e[n]=t[n])}),e}function ke(e){return typeof e==`string`&&[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(t=>t.test(e))}var B=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,Ae=function(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:`/`},r=`${e}=${encodeURIComponent(t)}`;if(n.maxAge>0){let e=n.maxAge-0;if(Number.isNaN(e))throw Error(`maxAge should be a Number`);r+=`; Max-Age=${Math.floor(e)}`}if(n.domain){if(!B.test(n.domain))throw TypeError(`option domain is invali
2d`);r+=`; Domain=${n.domain}`}if(n.path){if(!B.test(n.path))throw TypeError(`option path is invalid`);r+=`; Path=${n.path}`}if(n.expires){if(typeof n.expires.toUTCString!=`function`)throw TypeError(`option expires is invalid`);r+=`; Expires=${n.expires.toUTCString()}`}if(n.httpOnly&&(r+=`; HttpOnly`),n.secure&&(r+=`; Secure`),n.sameSite)switch(typeof n.sameSite==`string`?n.sameSite.toLowerCase():n.sameSite){case!0:r+=`; SameSite=Strict`;break;case`lax`:r+=`; SameSite=Lax`;break;case`strict`:r+=`; SameSite=Strict`;break;case`none`:r+=`; SameSite=None`;break;default:throw TypeError(`option sameSite is invalid`)}return n.partitioned&&(r+=`; Partitioned`),r},V={create(e,t,n,r){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:`/`,sameSite:`strict`};n&&(i.expires=new Date,i.expires.setTime(i.expires.getTime()+n*60*1e3)),r&&(i.domain=r),document.cookie=Ae(e,t,i)},read(e){let t=`${e}=`,n=document.cookie.split(`;`);for(let e=0;e<n.length;e++){let r=n[e];for(;r.charAt(0)===` `;)r=r.substring(1,r.length);if(r.indexOf(t)===0)return r.substring(t.length,r.length)}return null},remove(e,t){this.create(e,``,-1,t)}},je={name:`cookie`,lookup(e){let{lookupCookie:t}=e;if(t&&typeof document<`u`)return V.read(t)||void 0},cacheUserLanguage(e,t){let{lookupCookie:n,cookieMinutes:r,cookieDomain:i,cookieOptions:a}=t;n&&typeof document<`u`&&V.create(n,e,r,i,a)}},Me={name:`querystring`,lookup(e){let{lookupQuerystring:t}=e,n;if(typeof window<`u`){let{search:e}=window.location;!window.location.search&&window.location.hash?.indexOf(`?`)>-1&&(e=window.location.hash.substring(window.location.hash.indexOf(`?`)));let r=e.substring(1).split(`&`);for(let e=0;e<r.length;e++){let i=r[e].indexOf(`=`);i>0&&r[e].substring(0,i)===t&&(n=r[e].substring(i+1))}}return n}},Ne={name:`hash`,lookup(e){let{lookupHash:t,lookupFromHashIndex:n}=e,r;if(typeof window<`u`){let{hash:e}=window.location;if(e&&e.length>2){let i=e.substring(1);if(t){let e=i.split(`&`);for(let n=0;n<e.length;n++){let i=e[n].indexOf(`=`);i>0&&e[n].substring(0,i)===t&&(r=e[n].substring(i+1))}}if(r)return r;if(!r&&n>-1){let t=e.match(/\/([a-zA-Z-]*)/g);
2return Array.isArray(t)?t[typeof n==`number`?n:0]?.replace(`/`,``):void 0}}}return r}},H=null,U=()=>{if(H!==null)return H;try{if(H=typeof window<`u`&&window.localStorage!==null,!H)return!1;let e=`i18next.translate.boo`;window.localStorage.setItem(e,`foo`),window.localStorage.removeItem(e)}catch{H=!1}return H},Pe={name:`localStorage`,lookup(e){let{lookupLocalStorage:t}=e;if(t&&U())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&U()&&window.localStorage.setItem(n,e)}},W=null,G=()=>{if(W!==null)return W;try{if(W=typeof window<`u`&&window.sessionStorage!==null,!W)return!1;let e=`i18next.translate.boo`;window.sessionStorage.setItem(e,`foo`),window.sessionStorage.removeItem(e)}catch{W=!1}return W},Fe={name:`sessionStorage`,lookup(e){let{lookupSessionStorage:t}=e;if(t&&G())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&G()&&window.sessionStorage.setItem(n,e)}},Ie={name:`navigator`,lookup(e){let t=[];if(typeof navigator<`u`){let{languages:e,userLanguage:n,language:r}=navigator;if(e)for(let n=0;n<e.length;n++)t.push(e[n]);n&&t.push(n),r&&t.push(r)}return t.length>0?t:void 0}},Le={name:`htmlTag`,lookup(e){let{htmlTag:t}=e,n,r=t||(typeof document<`u`?document.documentElement:null);return r&&typeof r.getAttribute==`function`&&(n=r.getAttribute(`lang`)),n}},Re={name:`path`,lookup(e){let{lookupFromPathIndex:t}=e;if(typeof window>`u`)return;let n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(Array.isArray(n))return n[typeof t==`number`?t:0]?.replace(`/`,``)}},ze={name:`subdomain`,lookup(e){let{lookupFromSubdomainIndex:t}=e,n=typeof t==`number`?t+1:1,r=typeof window<`u`&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[n]}},K=!1;try{document.cookie,K=!0}catch{}var q=[`querystring`,`cookie`,`localStorage`,`sessionStorage`,`navigator`,`htmlTag`];K||q.splice(1,1);var Be=()=>({order:q,lookupQuerystring:`lng`,lookupCookie:`i18next`,lookupLocalStorage:`i18nextLng`,lookupSessionStorage:`i18nextLng`,caches:[`localStorage`],excludeCacheFor:[`cimode`],convertDetectedLanguage:e=>e}),J=class{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type=`languageDetector`,this.detectors={},this.init(e,t)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e,this.options=Oe(t,this.options||{},Be()),typeof this.options.convertDetectedLanguage==`string`&&this.options.convertDetectedLanguage.indexOf(`15897`)>-1&&(this.options.convertDetectedLanguage=e=>e.replace(`-`,`_`)),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=n,this.addDetector(je),this.addDetector(Me),this.addDetector(Pe),this.addDetector(Fe),this.addDetector(Ie),this.addDetector(Le),this.addDetector(Re),this.addDetector(ze),this.addDetector(Ne)}addDetector(e){return this.detectors[e.name]=e,this}detect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,t=[];return e.forEach(e=>{if(this.detectors[e]){let n=this.detectors[e].lookup(this.options);n&&typeof n==`string`&&(n=[n]),n&&(t=t.concat(n))}}),t=t.filter(e=>e!=null&&!ke(e)).map(e=>this.options.convertDetectedLanguage(e)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(t=>{this.detectors[t]&&this.detectors[t].cacheUserLanguage(e,this.options)}))}};J.type=`languageDetector`;var Y={};function X(e,t){Y[e]=t}function Ve(e){delete Y[e]}function He(){return{...Y}}var Ue={en:()=>e(()=>import(`./en-sgGNLAbe.js`).then(e=>e.default),[]),ja:()=>e(()=>import(`./ja-91nSUgcK.js`).then(e=>e.default),[]),de:()=>e(()=>import(`./de-PnXub_Lf.js`).then(e=>e.default),[]),es:()=>e(()=>import(`./es-Btdn1k-V.js`).then(e=>e.default),[]),fr:()=>e(()=>import(`./fr-tFZjYlQ1.js`).then(e=>e.default),[]),pt:()=>e(()=>import(`./pt-D1LhIQsU.js`).then(e=>e.default),[])},Z={};function We(e,r){return Z[e]||(Z[e]=r().catch(r=>{throw n(r,{source:t.ASYNC,component:`i18nLazyBackend`,context:{language:e}}),delete Z[e],r})),Z[e]}var Ge={type:`backend`,init(){}
2,read(e,t,n){let r=Ue[e];if(!r){n(null,{});return}We(e,r).then(r=>n(null,r[`../locales/${e}/${t}.json`]??{})).catch(e=>n(e,null))}},Ke={routeLoading:`Loading…`,appsSso:{signingIn:`Signing you in…`,failed:`We couldn't sign you in to this app. Please try again.`},inlineAuth:{title:`Sign in required`,subtitle:`Sign in to access {{workspace}}.`,close:`Close`,continueWithSso:`Continue with SSO`,continueWithProvider:`Continue with {{provider}}`,continueWithGoogle:`Continue with Google`,continueWithApple:`Continue with Apple`,ssoRedirectHint:`You'll be redirected to your organization's login page.`,passwordPlaceholder:`Enter your password`,loginWithPassword:`Sign in`,loggingIn:`Signing in...`,invalidCredentials:`Incorrect password. Please try again.`,genericError:`Something went wrong. Please try again.`},authFailure:{title:`Sign-in failed`,body:`We couldn't sign you in to {{workspace}}. Please try again or contact your workspace admin.`,tryAgain:`Try again`,backToSwitcher:`Back to workspaces`},login:{title:`Welcome to Base44`,loginWithGoogle:`Log in with Google`,loginWithGithub:`Log in with GitHub`,loginWithApple:`Log in with Apple`,loggingIn:`Logging in...`,or:`Or`,emailLabel:`Email`,emailPlaceholder:`Enter your email address`,continueWithEmail:`Continue with email`,back:`Back`,edit:`Edit`,lastUsed:`Last Used`,ssoEnabled:`<strong>{{workspace}}</strong> uses single sign-on`,genericWorkspace:`this workspace`,ssoClickBelow:`Click below to continue with your organization's login`,loginWithSso:`Log in with SSO`,ssoPromptTitle:`Log in with SSO`,ssoPromptEmailLabel:`Enter your work email`,ssoPromptEmailPlaceholder:`[email protected]`,ssoPromptContinue:`Continue with SSO`,ssoPromptBackToLogin:`Back`,ssoNotConfiguredError:`SSO is not configured for this email. Try a different one.`,ssoNotFoundPrompt:`Don't have SSO?`,ssoNotFoundGoBack:`Go back`,passwordLabel:`Password`,showPassword:`Show password`,hidePassword:`Hide password`,forgotPassword:`Forgot your password?`,passwordPlaceholder:`Enter your password`,checkingAuth:`Checking authentication method...`,checking:`Checking...`,continue:`Continue`,continueWithSSO:`Continue with SSO`,selectWorkspace:`Select a Workspace`,workspaceOrgBadge:`Org`,signInWithPassword:`Sign in with password`,useDifferentSignInMethod:`Use a different sign-in method`,hideOtherSignInMethods:`Hide other sign-in methods`,logIn:`Log in`,noAccount:`Don't have an account?`,signUp:`Sign up`,verifyEmailFirst:`Please verify your email before logging in. Check your email for the verification code.`,resendVerificationCode:`Resend verification code`,enterEmailFirst:`Please enter your email address first`,invalidEmail:`Please enter a valid email address`,ssoError:`SSO configuration error. Please try again.`,invalidCredentials:`Invalid email or password`,loginFailed:`Login failed. Please try again.`,failedResendVerification:`Failed to resend verification code. Please try again.`,passwordResetRequired:`For security reasons, you must reset your password before logging in. Check your email for a reset link.`,signupRestrictedSso:`Your organization manages accounts on this email domain. Sign in with SSO to continue.`,signupRestrictedInvite:`Your organization manages accounts on this email domain. Sign up with the invitation your administrator sent you.`,accountDisabled:`This account is disabled. If your organization manages your account, ask an administrator to invite you again.`,resetLinkSent:`A password reset link has been sent to your email.`,resendResetLink:`Resend reset link`,failedResendResetLink:`Failed to send reset link. Please try again.`,termsAndPrivacy:`<terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>.`},register:{title:`Create your account`,agreeToTerms:`By clicking "Sign Up", you agree to our <terms>Terms of Service</terms> and <privacy>Privacy Policy</privacy>.`,signUpWithGoogle:`Sign up with Google`,signUpWithGithub:`Sign up with GitHub`,signUpWithApple:`Sign up with Apple`,signingUp:`Signing up...`,creatingAccount:`Creating account...`,signUpButton:`Sign Up`,alreadyHaveAccount:`Already have a Base44 account?`,logIn:`Log in`,validatingReferral:`Validating referral code...`,invali
2dReferral:`Invalid Referral Code`,youveBeenInvited:`You've been invited!`,invitedToJoin:`<strong>{{name}}</strong> invited you to join Base44`,signUpFreeCredits:`Sign up to get <strong>{{credits}}</strong> free credits!`,letsBuild:`Let's build something amazing together!`,registrationFailed:`Registration failed. Please try again.`,failedValidateReferral:`Failed to validate referral code`,completeVerification:`Please complete the verification`,weakPassword:`Weak password`},forgotPassword:{title:`Reset your password`,subtitle:`Enter the email address you used to sign up, and we'll send you a link to reset your password.`,backToLogin:`Back to log in`,loginEmail:`Login email`,emailPlaceholder:`e.g., [email protected]`,sending:`Sending...`,verifyEmail:`Verify Email`,invalidEmail:`Invalid email address`,failedSendReset:`Failed to send reset link. Please try again.`},checkEmail:{title:`Check your email`,subtitle:`We've sent password reset instructions to <strong>{{email}}</strong>.`,backToReset:`Back to Reset password`,checkInfo:`Please check your email for the password reset link.`,mayTakeMinutes:`It may take a few minutes to arrive.`,goToSignIn:`Go to Sign In`,didntGetEmail:`Didn't get the email?`,resending:`Resending...`,resendEmail:`Resend email`,emailNotFound:`Email address not found. Please go back and try again.`,newResetSent:`New password reset email sent. Please check your inbox.`,failedResendEmail:`Failed to resend email. Please try again.`},resetPassword:{title:`Set new password`,subtitle:`Enter your new password for Base44`,newPasswordLabel:`New password`,newPasswordPlaceholder:`Enter your new password`,confirmPasswordLabel:`Confirm new password`,confirmPasswordPlaceholder:`Confirm your new password`,resetting:`Resetting...`,resetButton:`Reset Password`,backToLogIn:`Back to Log In`,invalidToken:`Invalid or missing reset token. Please request a new password reset.`,passwordsMismatch:`Passwords do not match. Please try again.`,weakPassword:`Please create at least an average strength password.`,resetSuccess:`Password reset successfully! Redirecting to login...`,resetSuccessLogin:`Password reset successfully! Please log in with your new password.`,failedReset:`Failed to reset password. Please try again.`,invalidOrExpiredToken:`Invalid or expired reset token`},mfa:{verifyTitle:`Verify your identity`,verification:{chooseMethod:`Choose an authentication method`,authenticatorApp:`Authenticator app`,smsMessage:`SMS message`,recoveryCode:`Recovery code`,continue:`Continue`,backToLogin:`Back to Login`,chooseAnotherMethod:`Choose Another Method`,verifyViaText:`Verify via Text Message`,verifyViaApp:`Verify via Authenticator App`,enterRecoveryCode:`Enter the recovery code`,rememberDevice:`Remember this device for 30 days`,verifying:`Verifying...`,verify:`Verify`,useRecoveryCode:`Use a Recovery Code`,sendingCodeTo:`Sending code to {{phone}}…`,enterCodeSentTo:`Enter the code sent to {{phone}}`,enterCodeFromApp:`Enter the code from your authenticator app`,yourPhone:`your phone`,didntReceiveCode:`Didn't receive a code?`,resendIn:`Resend in {{seconds}}s`,resend:`Resend`,enterCompleteRecoveryCode:`Please enter the complete recovery code`,enterCompleteCode:`Please enter the complete 6-digit code`,verificationFailed:`Verification failed. Please try again.`,failedSendCode:`Failed to send code. Please try resending.`}},authModal:{buildingApp:`Building your app`,verifyEmailSubtitle:`Verify your email to continue`,signUpSubtitle:`Sign up to watch it come to life`,loginSubtitle:`Log in to watch it come to life`},turnstile:{completeVerification:`Please complete the security verification`},otp:{title:`Verify your email`,subtitle:`We sent a verification code to {{email}}`,verificationCode:`Verification Code`,fillAllFields:`Please fill out all fields.`,enterCodeSent:`Enter the verification code sent to your email`,verifying:`Verifying...`,verifyEmail:`Verify Email`,wrongEmail:`Wrong email? Change it`,didntReceiveCode:`Didn't receive the code?`,resendEmail:`Resend email`,emailVerifiedLogin:`Email verified successfully! You can now log in.`,emailVerifiedContinue:`Email verified successfully! Please log in to continue.`,invali
2dCode:`Invalid verification code. Please try again.`,verificationFailed:`Verification failed. Please try again.`,newCodeSent:`New verification code sent to your email.`,failedResendCode:`Failed to resend verification code. Please try again.`},passwordStrength:{weak:`Weak password`,strong:`Strong password`,mustInclude:`Password must include:`,minChars:`At least 8 characters`,upperLower:`Upper & lower case letters`},workspaceGrantPicker:{label:`Workspace`,helper:`{{clientName}} will operate in this workspace`,unnamedWorkspace:`Unnamed workspace`},deviceVerification:{enterCompleteCode:`Please enter the complete code`,genericError:`An error occurred. Please try again.`,authorizedTitle:`Device Authorized`,authorizedBody:`You can close this window and return to your terminal or device.`,title:`Authorize Device`,loggedInAs:`Logged in as {{email}}`,instructions:`Enter the code shown in your terminal or device. Do not use a code shared by someone else.`,authorizing:`Authorizing...`,continue:`Continue`,staffWarning:`Base44 staff will never give you a code to enter on this page.`},pendingInvitations:{title:`Accept your workspace invitation`,description:`Your account was created for a workspace that invited you. Accept an invitation to get started.`,invitedAs:`Invited as {{role}}`,review:`Review invitation`,reviewFor:`Review the invitation to {{workspace}}`,loadFailed:`Couldn't load your invitations. Try again.`,retry:`Try again`,workspaceNameFallback:`Workspace`,signOut:`Sign out`},acceptInvitation:{invalidLink:`Invalid invitation link`,errorNoLongerValid:`This invitation is no longer valid. It may have expired, or you may already be a member of this workspace.`,errorExpired:`This invitation has expired`,errorLoadFailed:`Failed to load invitation details`,wrongEmailToast:`This invitation is for a different email address`,welcomeToast:`Welcome to {{workspace}}!`,acceptFailed:`Failed to accept invitation`,declinedToast:`Invitation declined`,declineFailed:`Failed to decline invitation`,loggedOutToast:`Logged out successfully. Please log in with the correct email address.`,logoutFailed:`Failed to log out`,loading:`Loading`,loadingInvitation:`Loa
2ding invitation...`,errorTitle:`Invitation Error`,goToHomepage:`Go to Homepage`,title:`You're Invited!`,subtitle:`Join your workspace and start collaborating`,invitedAs:`Invited as`,expires:`Expires`,securityWarningTitle:`Security Warning - Unverified Workspace`,securityWarningBody:`This workspace has SSO (Single Sign-On) enabled. Before accepting, please verify that you know and trust the person who invited you.`,securityWarningRisk:`Accepting invitations from unknown sources to SSO-enabled workspaces may pose security risks to your account.`,securityConfirmLabel:`I verify that I know and trust the workspace administrator who sent this invitation`,emailMismatch:`This invitation was sent to <strong>{{invitedEmail}}</strong>, but you're logged in as <strong>{{currentEmail}}</strong>. Please log in with the correct account to accept this invitation.`,loggingOut:`Logging out...`,logoutAndLogin:`Logout & Login with Correct Email`,accepting:`Accepting...`,acceptInvitation:`Accept Invitation`,declining:`Declining...`,decline:`Decline`,footer:`If you didn't expect this invitation, you can safely ignore it.`},joinViaInviteLink:{linkCopied:`Invite link copied`,linkCopyFailed:`Could not copy link`,invalidLink:`Invalid invite link`,defaultError:`We couldn't load this invitation. Please try again or contact the person who invited you.`,welcomeToast:`Welcome to {{workspace}}!`,joinFailed:`Failed to join workspace`,alreadyMemberToast:`You're already a member of {{workspace}}`,loading:`Loading`,domainRestrictedHeading:`You don't have access to this workspace`,continueToAccount:`Continue to your account`,login:`Login`,joiningWorkspace:`Joining workspace...`,errorHeading:{notFound:`Invitation Not Found`,expired:`Invitation Has Expired`,rateLimited:`Too Many Attempts`,generic:`Something Went Wrong`},roles:{owner:`owner`,admin:`admin`,member:`member`,editor:`editor`,viewer:`viewer`,guest:`guest`},excitedHeading:`We're excited to have you on board as {{roleArticle}}<br/><bold><cap>{{role}}</cap> in the "{{workspace}}" Workspace!</bold>`,onceAccepted:`Once accepted, access the workspace right from your Base44 dashboard.`,itWorks:`It works! 🙌`,ownerBody:`You created this invite and it works like a charm. Send it to someone special.`,pleaseLogIn:`Please log in to the relevant Base44 account to accept it`,alreadyMember:`You're already a member of this workspace.`,expiresOn:`Invitation expires on {{date}}`,expiresOnLabel:`Invitation expires on:`,goToWorkspace:`Go to Workspace`,copyInviteLink:`Copy invite link`,decline:`Decline`,joining:`Joining...`,acceptInvitation:`Accept Invitation`,logInToAccept:`Log in to accept`},oauthCallback:{processing:`Processing…`,connected:`Connected successfully!`,failed:`Connection failed`,failedTitle:`Connection Failed`,windowWillClose:`This window will close automatically…`}},qe={chromeExtensionBanner:{title:`Your Superagent works in your browser`,body:`It browses real sites and handles tasks for you, using accounts you're already signed in to.`,close:`Dismiss`,ariaLabel:`Your Superagent works in your browser. Install the Chrome extension.`},createApp:{backToHome:`Back to Home`},planPage:{goBack:`Go back`,upgrade:`Upgrade`,skipPlanShort:`Skip plan`,emptyTitle:`Let's plan your app`,emptyIdeasLabel:`Some ideas to get started...`,emptyIdeas:{designApp:{label:`Design an app for my idea`,prompt:`I have an idea for an app I'd like to build. Help me plan it out.`},createGame:{label:`Create a game`,prompt:`I want to create a game. Help me figure out the concept and how it should work.`},launchWebsite:{label:`Launch a website`,prompt:`I want to launch a website. Help me plan the pages and content it needs.`},todoApp:{label:`Make a to-do list app`,prompt:`I want to make a to-do list app. Help me plan the features and how tasks are organized.`},crm:{label:`Set up a CRM to manage my clients`,prompt:`I want to set up a CRM to manage my clients. Help me plan how to track contacts, deals, and follow-ups.`},booking:{label:`Set up an appointment booking system`,prompt:`I want to set up an appointment booking system. Help me plan scheduling, availability, and reminders.`},quiz:{label:`Make a simple quiz or trivia game`,prompt:`I want to make a simple quiz or trivia game. Help me plan the questions, scoring, and flow.`}},convoSubtitle:`Answer a few quick questions to get your app right`,rail:{title:`Plan progress`,heading:`{{appName}} plan`,subtitle:`Answer questions in chat to complete your plan`,connectorsTitle:`Connectors`,connectorRemove:`Remove {{connector}}`,fields:{intent:`Intent & goal`,audience:`Audience & roles`,core_flows:`Core flows`,design:`Design`},files:{title:`Files`,empty:`Add images, docs or references for your app`,add:`Add files`,uploading:`uploading…`,remove:`Remove from plan`,attachment:`File`,failed:`{{name}} — upload failed: {{error}}`,dismissFailed:`Dismiss failed upload`}
2,hints:{intent:`What you're building, and what it's for`,audience:`Who uses it, and what each person can do`,core_flows:`The main steps people take in your app`,design:`The look and feel — colors, type, and overall vibe`},designImageAlt:`Chosen design direction`,expandPlan:`Show plan`,collapsePlan:`Hide plan`,expandSection:`Expand {{section}}`,collapseSection:`Collapse {{section}}`,summary:{domain:`Domain`,changeDomain:`Change domain`,palette:`Color palette`,fonts:`Font pack`,assets:`Assets`}},thinkingLines:{reading:`Reading your idea`,fullPicture:`Getting the full picture`,picking:`Picking what's worth asking`,putting:`Putting your questions together`},askingQuestions:`Asking questions`,skippedQuestions:`Skipped questions`,message:{copy:`Copy message`,copied:`Copied`,showMore:`Show more`,showLess:`Show less`,edit:`Edit message`,more:`More actions`,revert:`Revert`,attachedFile:`Attached file`},survey:{skip:`Skip question`,next:`Next`,send:`Send`,regenerate:`Regenerate`,previousQuestion:`Previous question`,nextQuestion:`Next question`,expandDesign:`Expand {{label}}`,expand:`Expand`,previousDesign:`Previous design`,nextDesign:`Next design`,collapseDesigns:`Collapse designs`,cancel:`Cancel`,apply:`Apply`,editMockupPlaceholder:`Describe changes, e.g. "make it more modern" (optional)`,editMockupLabel:`Describe changes for {{label}}`,designNotePlaceholderSelected:`More contrast, warmer colors`,designNoteLabel:`Design note for {{label}}`,editMockupSend:`Apply changes`,editLimitReached:`You have used every edit for this question`,designChoiceLabel:`Choose a visual style`,generationFailed:`I wanted to ask clarifying questions but couldn't generate them properly.`,allImagesFailed:`The design previews couldn't be generated — use Regenerate to try again, or skip this question.`,continueAnyway:`Continue anyway`,close:`Close`,writeYourOwn:`Write your own answer here`,fileDropPrompt:`Click or drag files to upload`,fileDropHint:`Images, CSV, Excel or JSON`,removeFile:`Remove {{name}}`,skippedAnswer:`Skipped`,materialsPrompt:`Help us make it yours`,materialsDescription:`Add anything you already have.`,materialsHint:`Images, PDF, CSV or Excel`,materialsSiteTitle:`Already have a website?`,materialsSiteDescription:`We'll use your images and content from it`,materialsLinkPlaceholder:`yoursite.com`,materialsSkip:`I don’t have any of this`,referenceSite:`Use a reference site`,referenceSitePlaceholder:`Paste a site you love`,domainTitle:`Pick a web address for {{business}}`,domainGet:`Get it`,domainAnother:`I want another domain`,domainSkip:`Skip for now`,domainBest:`Best match`,domainConnected:`Connected`,domainEmpty:`Nothing available for “{{business}}” right now.`,domainLoading:`Looking for available addresses`,domainPurchaseFailed:`The purchase could not be started. Try again or skip for now.`},inputPlaceholder:`Share anything else you want in your building`,connectorPromptSeed:`Connect to {{connector}}`,prd:{startBuilding:`Start Building`,build:`Build`,widgetTitle:`{{title}} Plan`,rejected:`Rejected`,writing:`Writing`,updated:`Updated`,openRejected:`View rejected plan: {{title}}`,planning:`Planning`},turnLimitReached:`Message limit reached — start building to continue`,readyBar:{edit:`Edit plan`,stopEditing:`Stop editing the plan`,editPlaceholder:`What do you want to change?`}},hero:{title:`What will you build next?`,titleWithName:`What will you build next, {{name}}?`,greetingWithName:`Hi {{name}}<accent>.</accent>`,greeting:`Hi there<accent>.</accent>`,titleMobile:`Hi, What will you
3build next?`,titleMobileWithName:`Hi, What will you
4build next, {{name}}?`,subtitle:`Describe your app idea below or get inspired by our`,subtitleTemplatesLink:`templates`},dsHomepage:{section:{tabTemplates:`Templates`,tabCommunityTemplates:`Community templates`,tabBase44Templates:`Base44 templates`,tabRecent:`Recent apps`,tabCommunityTemplatesShort:`Community`,tabBase44TemplatesShort:`Base44`,tabRecentShort:`Recent`,tabWorkspaceHub:`{{name}}'s hub`,tabWorkspaceHubShort:`Hub`,goToHub:`Go to Hub`,viewAll:`Browse all`,viewAllShort:`Browse all`,visibilityPublic:`Public`,emptyTitle:`No templates yet`,emptyDescription:`Check back soon — new templates are added regularly.`,edit:`Edit`},noWorkspaces:{title:`No workspaces yet`,description:`Your account isn't part of any workspace yet. Contact your administrator to get access.`}},recentApps:{title:`Recent Apps`},recentAgents:{title:`Recent Superagents`,openAgent:`Open {{name}}`},chat:{compareModels:`Compare models`,compareModelsShort:`Compare`,compareModelsDescription:`Build two versions of your app, then choose one to continue.`,compareModelsBillingHint:`Both builds use credits. This can take several minutes.`,compareModelsApply:`Use comparison`,compareModelsUseSingle:`Use one model`,compareModelsSelectModel:`Select a model`,compareModelsVersionA:`Version A`,compareModelsVersionB:`Version B`,compareModelsSubmit:`Build two versions`,readMore:`Read more`,showLess:`Show less`,placeholder:`Describe the app you want to build...`,placeholderCreate:`Describe the app you want to create...`,placeholderPlanMode:`Describe the app you want to plan`,placeholderViewer:`Viewers cannot create apps`,placeholderWithUrl:`Add a description (optional)...`,captureFullMode:`Build a site like this one`,captureDesignMode:`Create a new site inspired by this design for...`,add:`Add`,close:`Close`,menuGroup:{filesAndConnections:`Files and connections`,startingPoint:`Starting point`,githubProject:`GitHub project`},attachFiles:`Attach files`,uploadFile:`Upload from computer`,uploadFileMobile:`Upload from device`,captureFromUrlDescription:`Create a 1:1 starting point`,createFromUrl:`Start from URL`,urlOfferNoticed:`We noticed you mentioned {{domain}}`,urlOfferFigmaNoticed:`We noticed you mentioned a Figma design`,urlOfferGithubNoticed:`We noticed you mentioned a GitHub repository`,urlOfferAction:`Add it as a starting point`,addFromGoogleDrive:`Upload from Google Drive`,aiModel:`AI Model`,selectAiModel:`Select AI Model`,model:`Model`,autoModelLabel:`Auto`,modelPicker:{powerfulTooltip:`Great for complex tasks. Uses more credits.`,fastTooltip:`Fast responses for everyday tasks.`,moreCreditsSubtitle:`Uses more credits`,automatic:`Automatic`,autoMode:`Auto mode`,selectModel:`Select model`,automaticDescription:`Matched with the best AI Model for each request`,new:`New`,manual:`Manual`,builderPlus:`Builder+`,manualDescription:`Select a specific AI model ({{models}}). Available on the Builder plan and above.`,upgradeToSelect:`Upgrade to select an AI model`,chooseModel:`Choose model`,chooseModelSubtitle:`Pick the right model for your app`,viewPlans:`View plans`,viewPlansTooltip:`This feature is available for {{plan}} users and above. Upgrade your plan to unlock access.`},speechToText:`Speech to text`,processingAudio:`Processing audio...`,clickToStopRecording:`Click to stop recording`,send:`Send`,mobileAp
4pToggle:`Mobile app`,mobileAppToggleTooltip:`Build a native mobile app (iOS & Android)`,sending:`Sending...`,tooManyFiles:`You can attach up to {{max}} files per message`,filesNotAttached_one:`{{count}} file wasn't attached.`,filesNotAttached_other:`{{count}} files weren't attached.`,placeholderMigration:`Describe what you want to build with your migrated data...`,migrateFromPlatform:`Migrate from another platform`,brandPicker:{useDesignSystem:`Use a design system`,selectedAriaLabel:`Brand: {{brand}}. Click to change`,removeBrand:`Remove brand`,chooseBrand:`Choose brand`,createNewDesignSystem:`Create new design system`,createDesignSystem:`Create a design system`,manageDesignSystem:`Manage design system`,listHeader:`Design system`,addDesignSystem:`Add design system`,generatingInProgress:`Generating a design system…`,default:`Default`,untitledBrand:`Untitled brand`},attachments:{previewImage:`Preview {{name}}`,openOriginal:`Open original`,moreActions:`More actions`,close:`Close preview`,previousImage:`Previous image`,nextImage:`Next image`,gallery:`Attached images`,goToImage:`Go to image {{number}}`},compareModelsUnavailableHint:`Remove the selected model, design system, connector, or integration to compare models.`,addFromLibrary:`Choose from library`},catalog:JSON.parse(`{"exploreTemplates":"Explore templates from the community","discoverDescription":"Discover a curated collection of applications built by our community.","discoverDescriptionBase44":"Discover a curated collection of applications built by the Base44 team.","failedToLoadCatalog":"Failed to load catalog items","showingItems":"Showing {{displayed}} of {{total}} items","searchApps":"Search apps","searchPlaceholder":"Search","viewAllTemplates":"View all templates","allCategories":"All","moreCategories":"More","moreCategoriesAria":"More categories","typeApp":"Apps","typeWebsite":"Websites","removeCategoryFilter":"Remove category filter","myListings":"My listings","pageTitle":"App Templates","taxonomyPageTitle":"Templates","superagentPageTitle":"Superagent templates","pageSubtitle":"Explore a curated collection of applications built by our community.","tabs":{"community":"Community","workspace":"Workspace","myTemplates":"My Templates"},"categories":{"marketingAndSales":"Marketing & Sales","operations":"Operations","dataAndAnalytics":"Data & Analytics","contentGeneration":"Content Generation","hrAndLegal":"HR & Legal","finance":"Finance","education":"Education","community":"Community","lifestyleAndHobbies":"Lifestyle & Hobbies","gamesAndEntertainment":"Games & Entertainment","Marketing & Sales":"Marketing & Sales","Operations":"Operations","Data & Analytics":"Data & Analytics","Content Generation":"Content Generation","HR & Legal":"HR & Legal","Finance":"Finance","Education":"Education","Community":"Community","Lifestyle & Hobbies":"Lifestyle & Hobbies","Games & Entertainment":"Games & Entertainment"},"dsCategories":{"dashboardsAndAnalytics":"Dashboards & analytics","internalTools":"Internal tools","crmAndMarketing":"CRM & marketing","finance":"Finance","hrAndLegal":"HR & legal","learning":"Learning","communityAndLifestyle":"Community & lifestyle","games":"Games"},"sort":{"popular":"Popular","newest":"Newest first","oldest":"Oldest first"},"languagePlaceholder":"Language","sourcePlaceholder":"Source","sourceAll":"All","sourceBase44":"Base44","sourceCommunity":"Community","sortPlaceholder":"Sort","filter":"Filter","filterWithCount":"Filter ({{count}})","done":"Done","noAppsFound":"No apps found","adjustSearchOrFilters":"Try adjusting your search or filters","templateNotFound":"Template not found or unavailable.","usageCount_one":"{{count}} usage","usageCount_other":"{{count}} usages","viewDetails":"View details","workspaceBadge":"Workspace","purchasedBadge":"Purchased","unknownUser":"Unknown User","private":"Private","byCreator":"by {{name}}","howTo":{"title":"How to Share Your App with the Community","intro":"Follow these simple steps:","step1Title":"Open your app's builder","step1Desc":"Navigate to an app you created or have admin access to","step2Title":"Go to catalog settings","step2Path":"Workspace → Settings → App Templates → Manage Listing","step3Title":"Publish your listing","step3Desc":"Add a description, screenshots, and configure your listing visibility","tipFull":"<bold>Tip:</bold> Make sure your app is deployed and has an engaging description to attract more users!"}
4,"modal":{"close":"Close","prevScreenshot":"Previous screenshot","nextScreenshot":"Next screenshot","screenshotAlt":"Screenshot {{index}}","goToScreenshot":"Go to screenshot {{index}}","createdBy":"by {{creatorName}}","unknownCreator":"Unknown","usages_one":"{{count}} usage","usages_other":"{{count}} usages","private":"Private","workspaceTemplate":"Workspace Template","clonePurchase":"Clone Purchase","processing":"Processing...","purchaseFor":"Purchase for \${{price}}","useTemplate":"Use Template","viewApp":"View app","paymentInfo":"Payment goes entirely to the creator","builtByBase44Partner":"Built by Base44 Partner","paidTemplateCreatorPayment":"This is a paid template. Payment goes entirely to the creator.","backendFunctionsEnabled":"Backend functions enabled","usesIntegrations":"Uses integrations","aboutThisApp":"About this app","mediaPreview":"Template preview","about":"About","details":"Details","published":"Published","publishedAgo":"Published {{time}}","visibility":"Visibility","publicTemplate":"Public Template","features":"Features","share":"Share","copyLink":"Copy link","shareOnFacebook":"Share on Facebook","shareOnLinkedIn":"Share on LinkedIn","shareByEmail":"Share by email","linkCopied":"Link copied","templateLinkCopied":"Template link copied to clipboard","shareUnavailable":"This template link is unavailable","invalidTemplate":"This template could not be opened","moreLikeThis":"More like this","noDescription":"No description available","termsOfUse":"By using this template, you agree to the Templates Marketplace Terms","success":"Success","error":"Error","purchaseFailed":"Purchase Failed","failedToPurchase":"Failed to initiate purchase","listingApproved":"App listing approved successfully","approveListingFailed":"Failed to approve listing","listingDeclined":"App listing declined successfully","declineListingFailed":"Failed to decline listing","pendingUpdate":"Pending Update for Review","codeChangesPending":"App code changes pending","metadataChanges":"Listing metadata changes:","metadataPrevious":"Previous","metadataUpdated":"Updated","emptyMetadataValue":"Empty","manageListing":"Manage Listing","approveUpdate":"Approve Update","declineUpdate":"Decline Update","approveListing":"Approve Listing","declineListing":"Decline Listing","approving":"Approving...","declining":"Declining...","cloneAsAdmin":"Clone as Admin","relatedTemplates":{"clientPortal":{"name":"Client Portal","description":"A simple hub for customer requests, shared files, and status updates."},"operationsTracker":{"name":"Operations Tracker","description":"Track workflows, owners, and daily progress across a small team."},"launchPlanner":{"name":"Launch Planner","description":"Plan campaigns, milestones, and launch tasks from one workspace."}},"reviewForm":{"heading":"Write a review","ratingLabel":"Your rating","titleLabel":"Title","optional":"(optional)","titlePlaceholder":"Summarize your experience","bodyLabel":"Description","bodyPlaceholder":"What did you like? What could be better?","moreCharactersNeeded_one":"{{count}} more character needed","moreCharactersNeeded_other":"{{count}} more characters needed","ratingRequired":"Choose a star rating.","bodyTooShort_one":"Write {{count}} more character.","bodyTooShort_other":"Write {{count}} more characters.","cancel":"Cancel","publish":"Post","postingAs":"Posting as","saveChanges":"Save changes","submitting":"Submitting...","submitSuccess":"Your review submitted.","genericError":"Something went wrong.","ratingDisplay":"{{rating}}/5","appPicker":{"label":"App they built for you","placeholder":"Select an app","searchPlaceholder":"Search your apps","none":"No app","empty":"No apps found"}},"reviews":{"reply":"Reply","edit":"Edit","delete":"Delete","report":"Report","seeMore":"See more","heading":"Reviews","headingWithCount":"Reviews ({{count}})","writeAReview":"Leave a review","addReview":"Add Review","editYourReview":"Edit your review","anonymous":"Anonymous","youBadge":"(you)","verifiedBadge":"Verified","reviewedAppLabel":"App they built","relationshipTags":{"cloned_template":"Used this template","contacted_partner":"Contacted with partner"},"authorOnlyBadge":"Pending review","authorOnlyDescription":"Your review is pending moderation and will appear once approved.","empty":"No reviews yet. Be the first to leave one.","emptySubtitle":"Be the first to leave one.","noReviewsYet":"No reviews yet","reviewCount_one":"{{count}} review","reviewCount_other":"{{count}} reviews","count_one":"({{count}} review)","count_other":"({{count}} reviews)","starCount_one":"{{count}} star","starCount_other":"{{count}} stars","ratingAriaLabel":"{{rating}} out of {{max}} stars","toggleRatingBreakdown":"Toggle rating breakdown","loadMore":"Load more","helpful":"Helpful","notHelpful":"Not helpful","editReview":"Edit","deleteReview":"Delete review","deleteAction":"Delete","reviewActions":"Review actions","ownerResponseHeading":"Response from the owner","ownerAuthorLabel":"Author","ownerTemplateAuthorLabel":"Template author","ownerPartnerLabel":"Partner","ownerResponseFrom":"Response from {{owner_name}}","ownerResponseEdit":"Edit response","ownerResponseDelete":"Delete response","ownerResponseSave":"Save","ownerResponseCancel":"Cancel","ownerResponseAddButton":"Add a response","ownerResponsePlaceholder":"Write a reply to {{name}}","sort":{"newest":"Most recent","most_helpful":"Most helpful","highest_rated":"Highest rated","lowest_rated":"Lowest rated"},"filter":{"verified":"Verified only","hasResponse":"With response"},"featured":{"positive":"Most helpful positive","critical":"Most helpful critical"},"ownerResponseSaveError":"Failed to save response. Please try again.","errorLoadMore":"Failed to load more reviews","errorSaveVote":"Failed to save your vote. Please try again.","errorDeleteReview":"Failed to delete review","countCompact":"({{count}})","flagReview":"Report","ownerFlagModalTitle":"Report the review","ownerFlagModalDescription":"Reported reviews are checked against our guidelines. Reviews that break them may be removed.","ownerFlagReasonLabel":"What's the main reason you're reporting this review?","ownerFlagSubmit":"Submit report","ownerFlagSubmitting":"Submitting...","ownerFlagCancel":"Cancel","ownerFlagSuccess":"Review reported","ownerFlagSuccessDescription":"The review has been sent for moderation.","ownerFlagErrorTitle":"Failed to report review","ownerFlagErrorDescription":"Something went wrong. Please try again.","ownerFlagOtherLabel":"Add more details","ownerFlagOtherPlaceholder":"Anything else that helps us understand this review","ownerFlagOtherBack":"← Back","flagReasonAbuse":"Offensive or abusive","flagReasonSpam":"Spam or promotion","flagReasonInappropriate":"Inappropriate content","flagReasonFake":"Misleading or fake review","flagReasonConflictOfInterest":"Conflict of interest","flagReasonPersonalInfo":"Contains personal information","flagReasonOther":"Other"},"readMore":"Read more","readLess":"Read less","terms":"Terms of use","premiumRequirement":{"text":"Some features in this app require the Builder plan or higher to work properly.","cta":"View plans"}},"retry":"Retry","taxonomyCategory":{"productivity":"Productivity","health-wellness":"Health & Wellness","business-intelligence-analytics":"Business Intelligence & Analytics","educational":"Educational","hr-recruitment":"HR & Recruitment","entertainment":"Entertainment","financial":"Financial","marketing-sales-automation":"Marketing and sales automation","dev-productivity":"Developer Tools","content-generation-editing":"Content Generation","content-analysis-extraction":"Content analysis + extraction","community":"Community","political-campaign":"Political","creative-tools":"Creative tools","travel-planning":"Travel Planning","restaurant-food-service":"Restaurant & Food Service","games":"Games","chatbot":"Chatbot","dashboards":"Dashboard","crm":"CRM","e-commerce-retail"
4:"E-commerce & Retail","social-networking":"Social Networking","operations":"Operations","non-profit":"Non Profit","sports":"Sport","business":"Business","portfolio":"Portfolio","music":"Music","personal":"Personal","ecommerce":"Ecommerce","restaurant":"Restaurant & Food","travel":"Travel","beauty":"Beauty","education":"Education & School","events":"Events","nonprofit":"Non Profit","one-page":"One-Page","pets":"Pets"},"taxonomySubcategory":{"client-portal":"Client & Customer Portal","inventory-management":"Inventory Management","dating":"Dating","field-service":"Field Service & Work Orders","home-management":"Home & Management","logistics":"Logistics","real-estate":"Real Estate","construction":"Construction","automotive":"Automotive & Cars","consulting":"Consulting & Coaching","law-legal":"Law & Legal","financial":"Financial Services","marketing-agency":"Marketing Agency","tech-software":"Tech & Software","agriculture-farm":"Agriculture & Farm","manufacturing":"Manufacturing & Industrial","services-maintenance":"Service & Maintenance","branding":"Branding","photography":"Photography","video":"Video & Film","architecture":"Architecture","film-tv":"Film & TV","artist-gallery":"Artist & Art Gallery","interior-design":"Interior Design","graphic-design":"Graphic Design","fashion-design":"Fashion Design","dj-producer":"DJ & Music Producer","band":"Band & Music Group","actor-theater":"Actor","record-label":"Record Label & Music Industry","singer-musician":"Singer & Musician","festival":"Music Festival","blog":"Blog","cv-resume":"CV & Resume","author-writer":"Author & Writer","vlog":"Vlog","fashion-clothing":"Fashion & Clothing","books-publishing":"Books & Publishers","jewelry":"Jewelry & Accessories","skincare-beauty":"Skincare & Beauty Ecom","home-decor":"Home Decor","bakery-cafe":"Bakery & Cafe","catering-chef":"Catering & Chef","bar-club":"Bar & Nightclub","recipe-cooking":"Recipe & Cooking","hotel-bnb":"Hotel & B&B","vacation-rental":"Vacation Rental","fitness":"Fitness & Sports","healthcare":"Healthcare & Medical","life-coaching":"Life Coaching","sports-club":"sports","makeup-cosmetics":"Makeup & Cosmetics","massage-spa":"Massage & Spa","online-courses":"Online Course & eLearning","college-university":"College & University","wedding":"Wedding","event-planner":"Event Planner","church":"Church & Religious","forum":"Forum","news":"News","landing-page":"Landing Page","blank":"Blank & Starter","coming-soon":"Coming Soon","pet-store":"Pet Store","veterinary":"Veterinary"}}`),billing:{subscriptionOverdue:`Subscription payment overdue`,updatePaymentMethod:`Update payment method`,creditLimitReached:`You've reached this month's limit. To continue creating apps`,creditLimitReachedAgents:`You've reached this month's limit. To continue creating agents`,dailyCreditLimitReached:`You've reached today's limit. To continue creating apps`,dailyCreditLimitReachedAgents:`You've reached today's limit. To continue creating agents`,upgradePlan:`upgrade your plan`,upgradeBannerV2Text:`You're on a roll - upgrade to keep going.`,upgradeBannerV2Cta:`Choose plan`},permissions:{viewerAccess:`You have viewer access and cannot create apps. Contact your workspace admin to upgrade to Editor.`},validation:{fillApiKeys:`Please fill in all required API keys before submitting.`,createAppFailed:`Failed to create app. Please try again.`},urlCapture:{title:`Start from URL`,description:`Use any website as a starting point for your new site.`,urlLabel:`Website URL`,urlPlaceholder:`e.g., www.example.com`,errorInvalid:`Enter a valid website URL, like www.example.com`,errorTooLong:`URL is too long. Please use a shorter URL.`,modeFull:`Content & Design`,modeFullDescription:`Build a similar site.`,modeDesign:`Design only`,modeDesignDescription:`Create a new site in the same style.`,modeContent:`Content only`,legalNotice:`Only use URLs where you have rights to the content.`,cancel:`Cancel`,add:`Add`,learnMore:`Learn about creating from a URL`,capturedUrl:`Captured url`,appReady:`Your app is ready! You can now customize it or add new features.`},integrations:{count:`Integrations: {{count}}`,loading:`Loading integration...`,selectedIntegrations:`Selected Integrations:`},connectors:{menuItem:`Add connector`,dialogTitle:`Connectors`,dialogDescription:`Connect tools and data sources to power your app.`,dialogDescriptionWithLink:`Connect tools and data sources to power your app. <learnMore>Learn more about connectors</learnMore>`,addAriaLabel:`Add {{name}}`,removeAriaLabel:`Remove {{name}}`,unavailableAriaLabel:`{{name}} is unavailable`,search:`Search`,manage:`Manage connectors`,add:`Add`,added:`Added`,connect:`Connect`,connected:`Connected`,connectAriaLabel:`Connect {{name}}`,remove:`Remove`,close:`Close`,back:`Back`,noResults:`No connectors found`,listLabel:`Connector results`,notAvailable:`Not available`,tierBadge:`Builder+`,sectionConnected:`Added to your workspace`,sectionMore:`More connectors`,connectionsFailed:`Couldn't load which connectors are already connected.`,retry:`Retry`,learnMore:`Learn more about connectors`,suggestionCardTitle:`Help me understand your integration request to:`,choosePrompt:`Choose a prompt to continue.`,somethingElse:`Something else`,cancel:`Cancel`,send:`Send`,connectTo:`Connect to <name>{{name}}</name>`,upgradeToConnect:`Upgrade your plan to connect {{name}} to your app.`,connecting:`Connecting {{names}}…`,cancelled:`cancelled`,unavailableTooltip:`This connector has been disabled by your workspace admin. Contact your admin to enable it.`,subtitles:{stripe:`Sell products or subscriptions and get paid online.`,salesforce:`Automate and sync CRM records.`,slack:`Send messages and manage Slack as a user.`,slackbot:`Post as a branded bot in y
4our Slack workspace.`,notion:`Organize and sync knowledge or project data.`,googlecalendar:`Manage your schedule and calendar events.`,googledrive:`Export and back up app-generated files.`,gmail:`Automate email sending and inbox management.`,googlesheets:`Sync and manage spreadsheet data.`,googleslides:`Generate and manage presentations.`,googledocs:`Manage and automate document creation.`,googlebigquery:`Query and sync analytics data.`,hubspot:`Sync CRM data and automate marketing.`,linkedin:`Share updates and access professional profiles.`,tiktok:`Track your profile stats and browse your videos.`,discord:`Notify channels and integrate with your Discord community.`,wix:`Access Wix site data and business tools.`,github:`Manage repos, issues, and pull requests.`,gitlab:`Manage projects, MRs, and CI/CD pipelines.`,bamboohr:`Employee directory and HR management.`,wrike:`Project planning and team coordination.`,box:`Secure cloud content management.`,clickup:`Organize projects and track team work.`,google_analytics:`Track website traffic and user insights.`,outlook:`Email and calendar.`,linear:`Issue tracking and project management.`,dropbox:`Store and sync files in the cloud.`,google_search_console:`SEO and search analytics.`,google_classroom:`Education and course management.`,airtable:`Flexible databases and spreadsheets.`,splitwise:`Expense splitting and group bills.`,microsoft_teams:`Team chat, channels, and meetings.`,share_point:`Document management and collaboration.`,one_drive:`Cloud file storage.`,typeform:`Forms, surveys, and data collection.`,googletasks:`Manage to-do lists and tasks.`,googlemeet:`Video conferences and meetings.`,instagram:`Publish content and manage comments on your Business account.`,hugging_face:`AI inference and model repos.`,calendly:`Automated appointment scheduling.`,contentful:`Headless CMS and content management.`,supabase:`Browse schemas, read data, and view project status (read-only).`,snowflake:`Cloud data warehouse and analytics.`,databricks:`Data lakehouse and AI platform.`,quickbooks:`Accounting and financial management.`,square:`Payments, point of sale, and commerce.`}},buildMode:{build:`Build`,buildDescription:`Start building immediately`,plan:`Plan`,planDescription:`Create a plan before building`},planMode:{label:`Plan first`,tooltip:`Enable Plan mode to have the AI create a detailed plan before building your app.`},viewAll:`View all`,error:`Error`,figmaDialog:{menuLabel:`Import from Figma`,loadingConnection:`Loading Figma connection`,title:`Generate from Figma`,description:`Paste a link to your Figma frame to generate an app based on your design.`,placeholderUrl:`e.g., https://www.figma.com/frame-link`,step1:`Right-click the <strong>frame or section</strong> you want to import from Figma.`,step2:`Choose <strong>"Copy/Paste as"</strong>, then select <strong>"Copy link to selection"</strong>.`,step3Label:`Paste Figma URL:`,needHelp:`Need help?`,checkDocumentation:`Check our documentation`,connectTitle:`Connect to Figma`,connectDescription:`Allow access to your Figma account to import your design.`,connectButton:`Connect to Figma`,connectedToFigma:`Connected to Figma`,errorMissingUrl:`Enter a URL to a Figma frame or section`,errorNotFigmaUrl:`Enter a URL to a Figma frame or section`,errorNotFrameUrl:`Enter a URL to one frame, not a file or page.`,errorRateLimit:`Figma's API is temporarily busy. Please try again in a few minutes.`,errorForbidden:`Invalid or expired Figma connection. Please try reconnecting your Figma account.`,errorNotFound:`Figma file not found. Please check the URL and make sure you have access to this file.`,errorGeneric:`Unable to access this Figma design. Please check the URL and try again.`,switchAccount:`Switch Figma account`,cancel:`Cancel`,generate:`Generate`,viewerCannotGenerate:`You have viewer access and cannot create apps. Contact your workspace admin to upgrade to Editor.`,figmaFile:`Figma file`,justNow:`Just now`,importingMessage:`Generate an app based on your design from this Figma frame.`,addPageMessage:`Adding new page '{{pageName}}' from this Figma frame.`,addPage:{title:`Add page from Figma`,description:`Paste a link to a Figma frame to add it as a new page in this app.`,submit:`Add page`,submitting:`Adding page...`,errorBu
4sy:`App is busy. Please try again in a moment.`,errorAppNotFound:`App not found.`,viewerCannotEdit:`Viewers cannot edit this app`}},figmaOAuth:{connectFailed:`Failed to connect Figma. Please try again.`,popupBlocked:`Popup blocked. Please allow popups and try again.`,disconnected:`Figma disconnected`,disconnectFailed:`Failed to disconnect Figma. Please try again.`},statusBanner:{capturing:`Capturing...`,figmaDescription:`Analyzing Figma design system. Extracting layout, typography, and color tokens to build your app.`},tabs:{webApp:`Apps`,aiAgent:`Superagents`,recentApps:`Recent apps`,templates:`Templates`,communityTemplates:`Community templates`,base44Templates:`Base44 templates`,favoritesComingSoon:`Favorites coming soon`,goToSuperagent:`Go to your Superagent`,lookingForAgents:`Want an agent that works on its own? <cta>Create Superagent</cta>`,superagentPrompt:`Want an agent that works on its own?`,createSuperagent:`Create Superagent`,superagentCardTitle:`Create an agent that works for you`,superagentCardDesc:`Create an agent that can plan, execute, and complete tasks on your behalf.`,superagentCardCompact:`Create an agent that works for you`},tryAgentBanner:{cta:`Try it now`},agent:JSON.parse(`{"ds":{"heroTitle":"<l1>Give your</l1><l2><sa>Superagent</sa> its first task.</l2>","ideasFooterNote":"You can find these ideas anytime inside your Superagent."},"onboarding":{"channelLogin":{"brand":"Superagent by Base44","title":"Set up your Superagent","google":"Continue with Google","other":"More sign-up options","invalidLink":"This setup link is incomplete. Open the latest link from your chat."},"channelHandoff":{"errors":{"alreadyConnected":"This Superagent already has this channel connected. Disconnect it in channel settings before trying again.","invalidLink":"This setup link is no longer valid. Send another message in your chat to get a new link.","inProgress":"Setup is already in progress. Try again in a moment."},"recovery":{"workspace":"Resume setup","restart":"Restart in chat","signIn":"Sign in again","workspaceBody":"This setup started in another workspace. Resume there to connect your chat.","restartBody":"This setup started with another account. Return to your chat to get a new setup link.","signInBody":"This chat already has an agent assigned. Sign in with the account you used to start setup."},"selectedAgent":"Superagent: {{name}}","agentLabel":"Superagent","selectAgent":"Choose a Superagent","searchAgents":"Search Superagents","noAgents":"No matches. Try another name.","connectAgent":"Connect Superagent","setup":"Set up your Superagent","chooseAgent":"Choose the Superagent to connect to this chat.","setupError":"Couldn’t start setup. Try again, or open a new setup link from your chat.","preparing":"Preparing your Superagent…","title":"Continue in your chat","entryBody":"Open your messaging app and send the prefilled message to start setup.","returnBody":"Your Superagent is ready. Send the prefilled message to connect this chat to your account.","error":"Couldn’t open your chat. Try again.","open":"Open {{channel}}","retry":"Try again","web":"Open Superagent"},"channelFirst":{"pickTitle":"Choose where to start talking with Superagent","webOption":"Continue here","moreOptions":"Other options","openChannel":"Open {{channel}}","pairing":"Open {{channel}} and send the pre-filled message, or press Start, to connect.","pairingScan":"Scan the code,<br/>or open {{channel}} to connect.","connectedBody":"Continue in {{channel}}. Your Superagent will send links to connect Google or Microsoft.","continueHere":"Continue setup here","loadError":"We couldn't load your setup. Try again.","retry":"Try again"},"entryTitle":"<l1>Meet your</l1><l2><sa>Superagent</sa></l2>","entryQuestion":"What agent would you like to create?","personalTitle":"Personal assistant","personalDescription":"Handles the everyday tasks that keep your life moving","businessTitle":"Business assistant","businessDescription":"Handles the everyday work that keeps your business running","skipWithoutChoosing":"Skip without choosing","entrySubtitle":"Your meetings, projects, people, decisions and follow-ups stay organized in up-to-date notes.","entrySubtitleNoMeetings":"Your conversations, projects, people, decisions and follow-ups stay organized in up-to-date notes.","notesStack":{"notesFolder":"Notes","addPlaceholder":"Type '/' to add elements","briefingFolder":"Briefing","briefingTitle":"Today","briefingItem1":"Reply to Maya about the launch date","briefingItem2":"Review the renewal quote before Friday","briefingItem3":"Confirm the venue for the offsite","meetingFolder":"Meeting notes","meetingTitle":"Launch planning sync","meetingLine1":"Maya needs the launch date confirmed","meetingLine2":"Renewal quote lands Friday","meetingChip":"AI note taker","updatesTitle":"Important updates","updatesWaiting":"<b>Waiting on:</b> Sam's revised contract","updatesDecision":"<b>Decision needed:</b> launch date before the team meeting","updatesSync":"Updated 2m ago"},"entryCta":"Get started","back":"Back","skip":"Skip","upgrade":"Upgrade","next":"Next","progressLabel":"Onboarding progress","stepLabel":"Go to step {{step}}","connectError":"We couldn't connect your account. Try again.","finishError":"We couldn't create your agent. Try again.","noCredits":{"title":"You're out of credits","body":"Building your Superagent uses credits. Upgrade to start.","adminBody":"Building a Superagent uses credits. Ask a workspace admin to upgrade."},"closeNotice":"Close","pastDue":{"title":"Payment overdue","body":"Your last payment didn't go through. Update your payment method to start.","adminBody":"A payment didn't go through. Ask a workspace admin to update it.","cta":"Update payment"},"connect":{"title":"Start with an agent that already knows you","google":"Connect to Google","googleCalendar":"Continue with Google Calendar","microsoft":"Connect to Microsoft","connected":"Connected","later":"Connect later"},"personalizing":{"ariaLabel":"Personalizing your agent","connected":"Connected. Taking a look around…"},"preparing":"Preparing your superagent…","world":{"title":"Hey {{name}},","titleNoName":"Hey there,","foundFallback":"I couldn't finish looking around just yet — I'll keep learning as we go.","rout
4inesTitle":"Routines I can run for you","editRoutine":"Edit {{name}}","foundIntro":"Here is what I found…","emptyIntro":"your inbox and calendar are quiet...","emptyNarrative":"I looked through your email and calendar, but there wasn't enough there to learn from. Once they fill up, I'll come back with suggestions built around how you actually work. For now, here are the routines most people start with.","noAccessIntro":"I couldn't read your email or calendar...","noAccessNarrative":"Without access to your email and calendar, I can't offer things specifically for you. I built you a few routines most people start with and work for almost anyone. Allow access any time and I'll rebuild them around your actual week.","allowAccess":"Allow account access","continueAnyway":"Continue anyway","analyzingContacts":"Analyzing your contacts…","analyzingContactsAlt":"Mapping names and roles…","understandingTalk":"Understanding how you talk…","understandingTalkAlt":"Reading your writing style…","buildingRoutines":"Building suggested routines and tasks…","buildingRoutinesAlt":"Matching tasks to your week…","innerCircleTitle":"Your inner circle","writingStyleTitle":"Your writing style","routineGroup":{"meetings":"Taking care of your meetings","inbox":"Taking care of your inbox","calendar":"Taking care of your calendar","briefing":"Keeping you briefed"},"meetingsRoutine":"Superagent joins your meetings and creates meetings notes","routinesFootnote":"You can always update and remove what the Superagent knows about you"},"editModal":{"title":"Edit routine","description":"This is the prompt your agent runs on — tell it exactly what to do.","nameLabel":"Name","descriptionLabel":"Description","instructionLabel":"Instructions","scheduleLabel":"When","save":"Save","cancel":"Cancel"},"pricing":{"title":"Choose your plan","subtitle":"Your Superagent uses credits to work for you. Start free and upgrade whenever you need more."},"channels":{"title":"Your superagent lives where you work","subtitle":"Keep your agent a text away from the apps you use every day","connect":"Connect","connected":"Connected","disconnect":"Disconnect","install":"Install","whatsappDescription":"Message your assistant in WhatsApp","slackDescription":"@Base44_Superagent to reach your assistant from Slack","imessageDescription":"Message your assistant in iMessage","telegramDescription":"Message your assistant in Telegram","mobileAppName":"Base44 Mobile App","mobileAppDescription":"Install the Base44 mobile app for iOS and Android"},"channelDialog":{"title":"Connect {{channel}}","confirm":"I've done this — connect","qrAlt":"QR code to connect {{channel}}","connectError":"We couldn't connect {{channel}}. Try again.","whatsappStep1":"Open WhatsApp on your phone","whatsappStep2":"Scan the QR code with your phone's camera","whatsappStep3":"Send the pre-filled message to link your agent","slackStep1":"Click connect to open Slack authorization","slackStep2":"Choose your workspace and approve access","slackStep3":"Message @Base44_Superagent from any channel or DM","imessageStep1":"Scan the QR code with your iPhone camera","imessageStep2":"Messages opens with your activation code","imessageStep3":"Send the message to link your agent","telegramStep1":"Scan the QR code or open Telegram","telegramStep2":"Start a chat with your agent's bot","telegramStep3":"Press Start to link your agent"},"continue":"Continue"},"greeting":"Hi {{name}},","greetingGeneric":"Hi there,","title":"Build your own AI Personal Agent","createTitle":"Create your own Superagent","experimentCreateTitle":"Put your Superagent to work","newBadge":"New","subtitle":"Your AI agent that runs tasks, connects to your tools, and works for you 24/7","experimentSubtitle":"Describe a task, or start from an idea below","experimentInputPlaceholder":"Give your Superagent a task to do...","ideasLabel":"Or start from one of these ideas:","promptInput":{"addContextAriaLabel":"Add context","nextAriaLabel":"Next"},"ideas":{"categories":{"business":"Business","productivity":"Productivity","finance":"Finance","creative":"Creative","education":"Education","home":"Home","travel":"Travel"},"cards":{"findClients":{"title":"Find new clients while I sleep","description":"Every night, hunt for 10 new companies that fit my client profile, find the right contact, and draft an email I can send in the morning.","prompt":"Every night at 11pm, find 10 new companies that match my ideal client profile, identify the right person to contact at each on LinkedIn, and draft a personalized intro message for each one. Send it to me in the chat so I can review and send in the morning."},"trackCompetitors":{"title":"Track my competitors","description":"Every Monday morning, check 3 competitors' websites, pricing, TikTok and LinkedIn for changes, and send me a brief.","prompt":"Every Monday morning at 9am, check my main 3 competitors' websites, pricing pages, TikTok and LinkedIn for any changes since last week. Send me a short brief covering what shifted and why it matters for us."}
4,"captureLeads":{"title":"Capture leads automatically","description":"Every morning, scan Gmail for new leads, log them in Google Sheets, and send intro replies.","prompt":"Every morning at 9am, scan my Gmail for new inbound leads, log each in a Google Sheet with name, company, email and source, and draft a personalized intro reply in my voice for me to approve and send."},"taxSeason":{"title":"Prepare me for tax season","description":"Every quarter, pull my income and expenses into a Google Sheet organized for my accountant.","prompt":"Every quarter, pull all transactions from Stripe and organize them into a Google Sheet with separate Income and Expenses tabs, categorized cleanly so I can hand it straight to my accountant."},"brandMentions":{"title":"Track brand mentions daily","description":"Every day, scan TikTok and the web for mentions of my company and summarize the sentiment.","prompt":"Every evening at 8pm, scan TikTok and the web for mentions of my brand. Send me a short summary covering total mentions, the overall sentiment breakdown, the top 3 most engaged posts, and anything that needs my response."},"revenueSummary":{"title":"Send me a weekly revenue summary","description":"Every Monday morning, pull last week's Stripe numbers vs the prior week and surface what changed.","prompt":"Every Monday at 9am, pull last week's Stripe numbers, revenue, new customers, MRR, churn, refunds, and compare each to the prior week. Highlight the biggest movers and explain what likely caused them."},"meetingBrief":{"title":"Prep me before every meeting","description":"30 min before every meeting, pull the invite, attendee info and recent emails into a short brief.","prompt":"30 minutes before any external meeting on my Google Calendar, send me a short brief with the meeting purpose, each attendee's role and company, the last few Gmail threads with anyone in the meeting, and 2–3 talking points."},"cleanInbox":{"title":"Clean my inbox daily","description":"Every morning, sort unread emails into reply today, FYI, and archive, and draft the urgent replies.","prompt":"Every morning at 8am, sort my unread Gmail into three buckets: Reply Today, FYI, and Archive, and draft replies in my voice for everything that needs a response so I just need to review and send."},"findNextRole":{"title":"Find my next role","description":"Search 5 senior roles posted this week, tailor my CV for each, and draft intro messages to hiring managers.","prompt":"Search for 5 senior roles posted in the last 7 days that match my background and preferences. For each role, tailor my CV to the job description and draft an intro message to the hiring manager."},"organizeDrive":{"title":"Organize my Drive every Sunday","description":"Every Sunday, scan my Google Drive for unsorted files and move them into the right folders automatically.","prompt":"Every Sunday evening at 8pm, scan my Google Drive for new and unsorted files from the past week and move them into the right folders based on filename, content and existing structure. Flag anything ambiguous instead of guessing."},"planDay":{"title":"Plan my day each morning","description":"Every morning, review my calendar and tasks, and tell me the 3 priorities for today.","prompt":"Every weekday at 8am, review today's Google Calendar and my open Notion tasks, then send me a message with my top 3 priorities for the day, the focus time I have between meetings, and any scheduling conflicts."},"stuckPrs":{"title":"Follow up on stuck PRs","description":"When a PR I own sits unreviewed for 4+ hours, send the reviewer a polite Slack nudge.","prompt":"Monitor my open GitHub PRs. When a PR I've authored sits without review activity for 4+ hours during work hours, send the assigned reviewer a polite Slack DM with the PR link and a one-line summary of what changed."},"stockMoves":{"title":"Catch big stock moves","description":"When any stock on my watchlist moves 5%+ in a day, ping me on Telegram or WhatsApp with the reason.","prompt":"When any stock on my watchlist moves 5% or more in a day vs the previous close, send me a Telegram or WhatsApp message with the ticker, % change, current price, and the most likely reason based on news from the last 24 hours."},"stocksWatching":{"title":"Suggest stocks worth watching","description":"Every Monday, surface 5 
4stocks worth a closer look based on my interests, risk profile, and what's moving in the market.","prompt":"Every Monday morning, surface 5 stocks worth a closer look this week, based on my interests, risk profile and what's moving in the market. For each: ticker, why now, key risk, and a brief valuation snapshot. Don't repeat picks from the last 4 weeks."},"unusedSubscriptions":{"title":"Find subscriptions I don't use","description":"Scan Gmail for every subscription, calculate the monthly total, flag duplicates, and suggest what to cut.","prompt":"Scan my Gmail from the past year for recurring charges and renewal notices. Build a list of every active subscription with its monthly cost, calculate my total monthly spend, flag duplicates or overlapping services, and suggest the top 3 to cancel and why."},"monthlyFinanceCheck":{"title":"Check in with me monthly on finances","description":"First of every month, review my income, spending, investments, and surface one thing to improve.","prompt":"On the 1st of every month, review last month's income, spending and investments in my finance Google Sheet vs the previous 3-month average. Send me a short summary with the biggest movers and one specific, actionable thing to improve next month."},"earningsSeason":{"title":"Track earnings season","description":"When a company I own reports earnings, log the results, guidance, and analyst reaction in a Google Sheet.","prompt":"When a company I own reports earnings, within 24 hours log into a Google Sheet: date, EPS actual vs estimate, revenue actual vs estimate, forward guidance, key analyst takes, and stock reaction. Send me a quick summary too."},"savingsGoal":{"title":"Plan a big savings goal","description":"I want to save $20k in 18 months. Build a monthly plan and check in with me every month.","prompt":"I want to save $20,000 in 18 months. Build a monthly savings plan in a Google Sheet showing target balance and required contribution per month. On the 1st of every month, compare actual vs plan, send me a status update, and adjust the remaining months if I'm ahead or behind."},"dailyContentIdea":{"title":"Daily content idea","description":"Every morning at 8am, send me one fresh content idea based on what's trending and what I've already made.","prompt":"Every morning at 8am, send me one content idea for today based on what's trending in my niche on TikTok and LinkedIn, what my audience engages with most, and what I haven't already posted recently. Include the hook, a quick outline, and which platform fits best."},"viralOpportunities":{"title":"Spot viral opportunities","description":"Monitor TikTok trends daily and ping me on Telegram when something in my niche starts blowing up.","prompt":"Monitor TikTok daily for trending sounds, formats and topics in my niche. The moment something starts gaining real momentum and fits my style, send me a Telegram message with an example post, why it's working, and a quick angle I could use."},"topicContentPlan":{"title":"Research a topic and plan content","description":"Research a topic deeply and turn it into a 5-part series with scripts, hooks, and posting order in Google Docs.","prompt":"Research a topic I give you deeply — credible sources, real examples, recent discussions — then turn it into a 5-part content series in a Google Doc with a series arc, per-post hooks, full scripts, posting order, and a recommended cadence."},"weeklyPerformanceReview":{"title":"Weekly performance review","description":"Every Monday, review last week's TikTok numbers, surface what worked, and suggest what to do more of.","prompt":"Every Monday morning, log last week's TikTok posts into a Google Sheet with views, likes, shares, saves and completion rate. Send me a summary with my top performers, common patterns in what worked, what flopped and why, and 3 specific ideas to test this week."},"newsletterFromContent":{"title":"Newsletter draft from my content","description":"Every Friday, pull my week's posts from TikTok and draft a newsletter I can send to my list.","prompt":"Every Friday afternoon, pull this week's TikTok posts and draft a newsletter in a Google Doc — short personal intro in my voice, 3–5 highlights with embedded links and added context, and a closing thought or question for readers."},"audienceResearch":{"title":"Research my audience","description":"Analyze my followers and top-performing posts and tell me who my actual audience is and what they want.","prompt":"Analyze my TikTok followers and my top 20 posts from the last 90 days. Tell me who my actual audience is, what topics and formats consistently outperform, what comments and DMs reveal about what they want more of, and 3 content directions worth leaning into."}
4,"lecturesToNotes":{"title":"Turn lectures into notes","description":"Send a voice note or video and get a clean summary saved to Notion or Google Doc for review later.","prompt":"When I send you a voice note, video or lecture recording, transcribe it and produce clean structured notes: a one-paragraph summary, key concepts as bullets, definitions of new terms, and 3–5 review questions. Save it to Notion or a Google Doc, titled with date and topic."},"examPrep":{"title":"Prepare me for an exam","description":"Build a 6-week study plan, send daily drills at 10am, and run a quiz every evening at 7pm.","prompt":"Build a 6-week study plan in Notion for the exam I'm preparing for, broken into weekly themes and daily topics. Every day at 10am, send me 3 practice problems on the day's topic. Every evening at 7pm, quiz me with 5 questions covering today plus spaced repetition. Track my scores in a Google Sheet."},"personalTeacher":{"title":"Be my personal teacher","description":"Every morning at 8am, send a new lesson on my chosen skill, assign daily practice, and test me every week.","prompt":"Teach me a skill I choose. Every morning at 8am, send today's lesson with a concept, an example, and one practice exercise. Every Sunday evening, test me with 10 questions covering the week's lessons and adjust the difficulty based on how I score."},"flashcardsFromNotes":{"title":"Build flashcards from my notes","description":"Turn my Notion notes into flashcard drills and every evening send me 5 questions on iMessage.","prompt":"Turn my Notion notes into flashcards (question on one side, answer on the other). Every evening, send me 5 questions on iMessage, prioritizing cards I've gotten wrong before and ones I haven't seen in a while. Track my answers over time."},"secondBrain":{"title":"Build my second brain","description":"Every day, pull ideas from my chats, notes, and readings, and organize them into a growing Notion knowledge base.","prompt":"Every day, pull interesting ideas, quotes and concepts from my recent chats with you, notes and readings I share. Organize them into my Notion knowledge base under the right topics, link related notes together, and flag any concept I've revisited 3+ times as important."},"learningReview":{"title":"Weekly learning review","description":"Every Sunday, review what I learned this week across my notes and chats, and summarize it in a Google Doc.","prompt":"Every Sunday evening, review everything I added this week across my Notion notes and our chats. Summarize it in a Google Doc: my top 5 ideas, key questions I'm still wrestling with, and connections between this week's topics and previous weeks."},"renovationPlan":{"title":"Plan a renovation end to end","description":"Research contractors, compare quotes, track expenses against budget, and keep the full project in Google Sheets.","prompt":"Help me plan my renovation end to end. Research and compare contractors, log every quote, track expenses against my budget by category, and maintain a timeline with milestones — all in a Google Sheet. Update weekly and flag when I'm trending over budget."},"familySchedules":{"title":"Coordinate family schedules","description":"Every Sunday night, pull everyone's week into one shared calendar and flag the conflicts.","prompt":"Every Sunday at 8pm, pull each family member's calendar for the upcoming week into our shared Google Calendar. Send me a summary flagging conflicts, overlapping commitments, pickup gaps, and double-booked drivers."},"schoolUpdates":{"title":"Stay on top of school updates","description":"When my kid's school sends an email, extract events and deadlines into my calendar and summarize what I need to do.","prompt":"When my kid's school sends an email, extract any events, deadlines, permission slips and supplies needed. Add the events to Google Calendar with reminders, and send me a summary of what I need to do, by when, and what to buy or sign."},"wishlistPriceDrops":{"title":"Spot price drops on my wishlist","description":"Watch prices on items I'm waiting to buy and alert me on iMessage or Telegram when any of them drops.","prompt":"Track the prices of items on my wishlist daily. When any item drops 10% or more vs the last 7 days, or hits a target price I've set, send me an iMessage or Telegram with the item, current price, previous price, % drop and a direct link to buy."},"billsReminder":{"title":"Never miss a bill","description":"Scan Gmail for incoming bills, log the due date in Google Sheets, and remind me 3 days before each one.","prompt":"Scan my Gmail for incoming bills and log each one in a Google Sheet with vendor, amount, due date, autopay status and category. 3 days before each due date, remind me with the amount and a payment link if available."},"movingPlan":{"title":"Plan my move to a new home","description":"Find movers, compare quotes, build a packing checklist, and schedule every milestone.","prompt":"Help me plan my move. Research 5 moving companies and compare quotes in a Google Sheet, build a packing checklist by room, and schedule every milestone in my Google Calendar — booking movers, transferring utilities, change of address, packing deadlines, move day. Remind me 3 days before each."},"flightPriceDrops":{"title":"Notify when flight prices drop","description":"Twice a day, check flights to a destination I choose and alert me when prices drop or a deal appears.","prompt":"Twice a day, check flights to a destination I choose for the dates I give you. Alert me when prices drop 10%+ vs the last 7 days, or when a real deal appears below my target. Send airline, dates, price and a direct booking link."},"nextTrip":{"title":"Find my next trip","description":"Based on my budget, dates, and vibe, research 5 destinations, compare flights and hotels, and recommend the best one.","prompt":"Based on the budget, dates, vibe and origin city I give you, research 5 destinations matching the vibe, compare flights and hotels for each in a Google Sheet, and recommend your top pick with clear reasoning."},"entireTrip":{"title":"Organize my entire trip","description":"Research flights and hotels, suggest restaurants and activities, and build a full itinerary in my calendar.","prompt":"For my upcoming trip, research and recommend flights and a hotel within budget, suggest restaurants and activities matching my interests, then build a day-by-day itinerary in Notion and add events to Google Calendar with addresses and reservation details."},"travelExpenses":{"title":"Track my travel spending","description":"Every trip, log every expense email into a Google Sheet so I know the true total when I get home.","prompt":"When I tell you a trip is starting, monitor Gmail for receipts, booking confirmations and expense emails for those dates. Log each into a Google Sheet by category — flights, hotel, food, activities, transport. At trip end, send me total spend by category vs my budget."},"tripResearchBrief":{"title":"Research before a trip","description":"Deliver a brief covering recommendations, local customs, weather, tipping, safety, visa rules, and what to avoid.","prompt":"For my upcoming trip, build a Google Doc brief covering visa requirements, weather forecast, local customs and etiquette, tipping norms, safety tips and areas to avoid, public transport basics, common scams, and 5 unmissable things to do. Keep it skimmable."},"saveMoneyTrip":{"title":"Save money on my trip","description":"Analyze my planned trip and find cheaper flights, hotel alternatives, free activities, and local deals.","prompt":"Look at my planned trip in Notion and find ways to cut total cost — cheaper flights with similar timing, hotel alternatives in the same area, free or low-cost activities replacing paid ones, public transit instead of taxis, and current local deals or city passes. Show savings as a clear before/after total."}}},"cta":"Create your Superagent","creating":"Creating...","continueHero":{"heading":"Pick up where you left off","headingDs":"<l1>Welcome back<accent>
4.</accent></l1><l2>Your Superagents have been busy</l2>","continueBtn":"Continue with {{name}}","or":"Or","createNew":"Create a new superagent","activeAgo":"Active {{time}}","you":"You"},"features":{"hassleFree":{"title":"Hassle free","desc":"No Docker, no servers, no setup. Just run your Superagent."},"alwaysOn":{"title":"Always on","desc":"Runs tasks and automations for you, 24/7."},"actions":{"title":"Takes real action","desc":"Handles tasks, sends updates, and reacts automatically."},"remembers":{"title":"Remembers everything","desc":"Keeps track of your goals, preferences, and context."},"everywhere":{"title":"Lives where you are","desc":"Works in WhatsApp, Telegram, Slack, and your browser."},"secure":{"title":"Secure by default","desc":"Access only to what you allow."}},"untitled":"Untitled Agent","active":"Active","noDescription":"No description available","edited":"Edited {{time}}","updated":"Updated {{time}}","failedToCreate":"Failed to create agent. Please try again.","errorPage":{"title":"Oops, something went wrong","descriptionLine1":"There was a technical issue on our side.","descriptionLine2":"Go back to the agent creation page and try again","goToAgents":"Go to agents","needHelp":"Need help? visit Base44<support>Support center</support>"}}`),appCard:{edited:`Edited {{time}}`,updated:`Updated {{time}}`,updatedRecently:`Updated recently`},appsList:{emptyTitle:`You haven't created any apps yet.`,emptySubtitle:`Create your first app using the form above!`},commandPalette:{accountProfile:`Profile`,accountBuilder:`Builder`,dialogTitle:`Quick navigation`,dialogDescription:`Jump to apps, templates, billing, and workspace settings from the homepage.`,searchPlaceholder:`Search apps, settings, templates, billing...`,baseCodeSearchPlaceholder:`Search branches and settings...`,searching:`Searching workspace apps...`,emptyTitle:`No matching destination`,emptyDescription:`Try an app name, a settings section, or a page like billing or templates.`,baseCodeEmptyDescription:`Try a branch name or a settings section.`,allApps:`All apps`,backToWorkspace:`Back to workspace`,templates:`Templates`,billing:`Billing`,groups:{branches:`Branches`,apps:`Apps`,agents:`Agents`,navigate:`Pages`,docs:`Docs`,workspace:`Workspace`,account:`Account`},subtitles:{favoriteApp:`Favorite app`,recentApp:`Recent app`,agent:`Agent`,page:`Page`}},ideas:{label:`What would you like to create?`,more:`More`,categories:{CRM:`CRM`,"Dev productivity":`Dev Productivity`,Educational:`Educational`,"Content Generation and Editing":`Content Generation and Editing`,"Personal Finance":`Personal Finance`,"Health and Wellness":`Health and Wellness`,Productivity:`Productivity`,"Travel Planning":`Travel Planning`,Entertainment:`Entertainment`,Environmental:`Environmental`,"Home Management":`Home Management`,"Creative Tools":`Creative Tools`,Tasks:`Tasks`,"CRM & Sales":`CRM & Sales`,Portfolio:`Portfolio`,Finance:`Finance`,"Scheduling & Booking":`Scheduling & Booking`,eCommerce:`eCommerce`,"Construction & Trade":`Construction & Trade`,"Events & Community":`Events & Community`,Wellness:`Wellness`,"Operations & Logistics":`Operations & Logistics`,"Tasks & Workflows":`Tasks & Workflows`,"Content & Sites":`Content & Sites`,Booking:`Booking`,"E-commerce":`E-Commerce`,Projects:`Projects`,Operations:`Operations`},scrollLeft:`Scroll left`,scrollRight:`Scroll right`},dashboardSuggestions:{panelTitle:`What's next for`,showMore:`Show more`,sortAppsCurrent:`Sort apps — currently {{current}}`,sortMostUsed:`Most used`,sortRecent:`Recent`,sortTooltipMostUsed:`Most used apps`,sortTooltipRecent:`Recent apps`,appsMenuTitle:`Apps`,composerPlaceholder:`Or describe your own change…`,getCreditsToSend:`Get credits to send`,zeroCreditsRemaining:`0 credits remaining`,refreshSuggestions:`Refresh suggestions`,regenerateOnceTooltip:`New suggestions can only be generated once`,noSuggestionsRetry:`No suggestions right now`,submitFailed:`Couldn't send your message. Please try again.`,refreshFailed:`Couldn't refresh suggestions. Please try again.`,loadFailedRetry:`Couldn't load suggestions`,tryAgain:`Try again`,appInsightsTitle:`Insights for your app`,appInsightsLoadFailedRetry:`Couldn't load insights`,appInsightsEmptyRetry:`No insights right now`,appInsightsHandoffFailed:`Couldn't start your agent. Please try again.`,appInsightsOpportunitiesFound_one:`Your Superagent found {{
4count}} opportunity in {{appName}}:`,appInsightsOpportunitiesFound_other:`Your Superagent found {{count}} opportunities in {{appName}}:`,dividerCreateAgent:`Or create an agent to handle your routine work`,dividerContinueAgent:`Or continue with your agent`,noAgentHeader:`Start with the first task your agent can do for <app/>`,withAgentHeader:`What {{agentName}} can do for <app/>`,continueConversation:`Continue conversation`,agentNameFallback:`your agent`,appInsightsRunPromptIntro:`You're my Superagent for {{appName}}. Here's the first thing I'd like us to tackle:`,appInsightsContinuePromptIntro:`Here's the next thing I'd like us to tackle for {{appName}}:`,appInsightsDismissTooltip:`Don't show again`,panelLabel:`Your apps dashboard`,latestApps:`Recent apps`,allApps:`All Apps`,promptSuggestionsFor:`Suggested actions for`,upgrade:`Upgrade`,earnBonusTitle:`Earn bonus credits`,earnBonusDescription:`Get credits when friends publish their first app`,outOfCreditsTitle:`You're out of monthly credits`,upgradeToKeepBuilding:`Upgrade to keep building`,benefitMoreMessageCredits:`More message credits`,benefitNoDailyLimit:`No daily message limit`,benefitMoreIntegrations:`More integration credits`,viewPlans:`View Plans`},partners:{viewDetails:`View details`,contact:`Contact`},partnerModal:{imageAlt:`Partner`,deleteReviewTitle:`Delete your review?`,deleteReviewDescription:`This action cannot be undone.`,deleteReviewConfirm:`Delete`},googleAdsPastDue:{title:`Google Ads payment overdue`,description:`Your Google Ads payment didn't go through, so your campaigns are paused. Update your payment method to resume them.`,fixPayment:`Fix payment`},pastDue:{title:`Subscription payment overdue`,description:`Your subscription payment is past due. Please update your payment method to restore full access to your plan features.`,tryAgain:`Try again`,trying:`Trying...`,updatePaymentMethod:`Update payment method`},paymentMethod:{updateError:`Could not update payment method`},upgradeConfirm:{tryAgain:`Try again`,loading:`Loading...`},baseCode:{promotion:{artwork:`<intro>You’ve got</intro><coupon><gift/><label>a coupon</label></coupon>`,close:`Close`,workspaceDescription:`Apply a coupon code for <strong>{{workspace}}</strong>. One activation per workspace.`,workspaceDetails:`This promotion applies to <strong>{{workspace}}</strong>. One activation per workspace.`,title:`Have a coupon?`,freeUntil:`Free until {{date}}`,freeAutoUntil:`Free Auto until {{date}}`,activeDescription:`Free Auto is active in this workspace.`,endedTitle:`Promotion ended`,endedDescription:`Your free Auto promotion has ended.`,codeLabel:`Coupon code`,placeholder:`Enter coupon code`,apply:`Apply`,retry:`Try again`,statusFailed:`Couldn’t load promotion status. Try again.`,membershipRequired:`You need to be a member of this project’s workspace to view its promotion.`,errors:{required:`Enter a coupon code.`,tooLong:`Coupon codes can contain up to 64 characters.`,invalidCode:`This code isn’t valid for this promotion. Check the code and try again.`,redemptionLimitReached:`This code has reached its redemption limit. Try another code.`,alreadyRedeemed:`This workspace has already redeemed this promotion.`,permissionDenied:`You don’t have permission to apply a code in this workspace. Ask a workspace admin for help.`,workspaceUnavailable:`This workspace is no longer available. Refresh the page.`,tooManyAttempts:`Too many attempts. Wait a minute and try again.`,connectionError:`Couldn’t confirm whether the code was applied. Check your connection and try again.`,applyFailed:`Couldn’t apply the code. Try again.`,unlockWorkspace:`Unlock this workspace to apply your code.`,membershipRequired:`You need to be a member of this project’s workspace to apply a code.`}},projectAccessError:`We couldn’t open this project. Try again or select another project.`,retry:`Try again`,pickTitle:`Connect a repo to open`,pickDescription:`Connect a repo from your account or paste a GitHub URL so your team can make changes in Base44. Changes become a PR, and your repo stays the source of truth.`,selectRepository:`Select a repository and edit in Base`,viewMore:`View more`,openInBase:`Open in Base`,opening:`Opening…`,title:`Base Code`,description:`Connect a G
4itHub repository to get started.`,heroTitle:`Your codebase, ready to build.`,heroSubtitle:`Base Code sets up a cloud development environment for your existing codebase, with live previews and a place for your whole team to build together.`,connect:`Connect GitHub`,connecting:`Connecting…`,lockupAlt:`GitHub connected to Base44`,teamProof_one:`{{count}} person from your workspace already builds in Base Code`,teamProof_other:`{{count}} people from your workspace already build in Base Code`,trustRepos:`<strong>Cloud environment</strong> Base Code learns your codebase and sets up an environment your team can use.`,trustChat:`<strong>Live previews</strong> See changes as you build, with a live preview for every branch.`,trustTeam:`<strong>Build together</strong> Product, Design, QA, Marketing, and Engineering can work directly on the product.`,composerPlaceholder:`What do you want to change in {{project}}?`,openPullRequests:`Your open PRs`,viewAll:`View all`,noOpenPullRequests:`You have no open pull requests in this repo`,pullRequestsFailed:`Couldn’t load pull requests from GitHub. Try again.`,pullRequestTitle:`PR #{{number}} {{title}}`,prNumber:`PR #{{number}}`,madeWithBase44:`Made with Base44`,unresolvedThreads_one:`{{count}} unresolved comment`,unresolvedThreads_other:`{{count}} unresolved comments`,prStatus:{conflicts:`Conflicts`,draft:`Draft`,approved:`Approved`,inReview:`In review`,open:`Open`},teamMerged:`Your team merged to {{branch}}`,noTeamActivity:`Nothing merged yet`,you:`You`,unknownAuthor:`Unknown`,liveInProject_one:`{{count}} person in the project`,liveInProject_other:`{{count}} people in the project`,switchProject:`Switch project`,activityTitle:`Activity`,activityDescription:`What your team merged recently.`,noProjectsTitle:`No repos here yet`,noProjectsDescription:`Import a GitHub repo to start working on it from here.`,noRepoAccessTitle:`Base44 can't read this repo's pull requests`,noRepoAccessDescription:`This project was imported from a public URL, so Base44 has no access to the repository on GitHub. Grant access to see pull requests here.`,grantRepoAccess:`Grant repo access`,searchPullRequests:`Search pull requests`,clearSearch:`Clear search`,noMatchingPullRequests:`No pull requests match this view`,sortLabel:`Sort`,filterLabel:`Filter by status`,sort:{numberDesc:`PR number: high to low`,numberAsc:`PR number: low to high`},filter:{all:`All`,inReview:`In review`,conflicts:`Conflicts`,open:`Open`},previousPage:`Previous page`,nextPage:`Next page`,pageOf:`{{page}}/{{pages}}`,filterAria:`Filter by status: {{value}}`,sortAria:`Sort: {{value}}. Activate to reverse.`,attachFile:`Attach file`,projectState:{running:`Project running`,starting:`Project starting`,down:`Project down`,asleep:`Project asleep`,unknown:`Project status unknown`},setupTitle:`Finish setting up "{{project}}"`,setupProgress:`{{done}} of {{total}} done`,setupSubtitle:`This card will disappear once every step is done.`,openApp:`Open app`,openEditor:`Open in editor`,createBranch:`Create branch`,createNewBranch:`Create new branch`,liveInProject:`Working now`,collaboratorYou:`{{name}} (you)`,collaboratorsTooltip:`See who has this repo open and which branch they're on`,findSomeone:`Find someone`,noCollaboratorsFound:`No one matches`,baseBranch:`Base branch`,baseBranchTooltip:`Branch to start from`,loadingBranches:`Loading branches…`,searchBranches:`Search branches`,noBranchesFound:`No branches match`,setupStep:{importProject:{title:`Import project`,description:`Pick a repo from GitHub — Base44 will read and upload it.`},askForChange:{title:`Ask for a change in chat`,description:`Describe it in one line and watch the preview update.`},openPr:{title:`Open a PR`,description:`Base commits to a branch. You review and merge.`}},searchProjects:`Search`,addRepository:`Add new repository`,projectUpdated:`Updated {{when}}`,teamMergedUnknownBranch:`Recently merged by your team`,showMoreActivity:`Show more`,taskFailed:`That task didn't start. Try sending it again.`,dismissFailedFile:`Dismiss {{name}}`,role:{wordmark:`Base Code`,title:`How familiar are you with code?`,skip:`Skip`,options:{writes_code:{title:`I write the code`,description:`Short answers, git terms are fine, skip the explanations.`},codes_sometimes:{title:`I code sometimes`,description:`Explain how the project works, skip the basics`},new_to_coding:{title:`I’m new to coding`,description:`Walk me through my first change, step by step`}},continue:`Continue`},roleCard:{title:`How do you usually work on a project?`,skip:`Skip`,send:`Send`,dismiss:`Dismiss`,customLabel:`Write your own answer`,customPlaceholder:`Write your own answer here`,options:{writes_code:{title:`I write the code`,description:`Short answers, git terms are fine, skip the explanations.`},codes_sometimes:{title:`I code sometimes`,description:`Explain how the project works, skip the basics`},new_to_coding:{title:`I don’t code – I plan, design or review`,description:`Walk me through my first change, step by step`}}},noRepoHelp:{title:`Not sure which repo?`,description:`Contact your repository owner`,draft:`Draft a message`,dismiss:`Dismiss`},draftMessage:{title:`Draft a message`,label:`A message to send`,default:`Hi, I'm working on Base Code and need to connect our project on GitHub to Base44. Can you send me the repo URL or name?`,sendVia:`Send via`,copy:`Copy message`,copied:`Message copied`,copiedForSlack:`Copied — paste it in Slack`,copyFailed:`Couldn't copy the message`,channel:{slack:`Copy for Slack`,gmail:`Send in Gmail`,whatsapp:`Send in WhatsApp`}}},importRepo:{trigger:`Connect your repo`,triggerTooltip:`Paste a GitHub URL or pick a repo from your account to connect it. Your project will open in Preview.`,newBadge:`New`,checkingConnection:`Checking GitHub connection`,connect:{title:`Ready to connect your repo`,description:`First, connect your GitHub account.`,action:`Connect to GitHub`},title:`Connect your repository`,description:`Choose a repo from your account or paste a GitHub URL so your team can make changes in Base44. Changes become a PR, and your repo stays the source of truth.`,documentationHelp:`<strong>Need help?</strong>
4 Check out <docs>documentation</docs>`,sourceLabel:`Import source`,sourceGithub:`From your account`,sourcePaste:`Paste a link`,sourceLibrary:`Open-source library`,libraryRepos:{excalidraw:`The whiteboard everyone sketches diagrams in.`,tldraw:`The other famous whiteboard, known from the "make it real" AI demos.`,calCom:`Open-source Calendly, the flagship OSS SaaS alternative.`,ghost:`The open-source blogging and newsletter platform.`,nocoDB:`Open-source Airtable that turns any database into a smart spreadsheet.`,twenty:`The open-source CRM taking on Salesforce.`,documenso:`Open-source DocuSign for signing documents.`,formbricks:`Open-source Typeform for surveys and forms.`,umami:`Open-source Google Analytics for privacy-friendly web stats.`,planka:`Open-source Trello with kanban boards for teams.`},connectedAs:`Connected as <name>{{username}}</name>`,unknownUser:`GitHub user`,switchAccount:`Switch account`,switchingAccount:`Switching…`,disconnect:`Disconnect`,disconnectFailed:`Couldn't disconnect GitHub. Try again.`,selectRepository:`Select repository`,searchRepositories:`Search in repositories`,noMatchingRepositories:`No matching repositories`,noRepositories:`No repositories found — make sure the Base44 GitHub app has access`,readOnly:`Read-only`,private:`Private`,connectionExpired:`Your GitHub connection expired. Reconnect your account, then try importing again.`,workspacePolicyBlocked:`Your workspace's GitHub policy doesn't allow this import. Ask a workspace admin for help.`,updatedAgo:`Updated {{time}}`,readOnlyRepoNote:`You can only read {{repo}}, so Base44 could never push changes back to it. Use “Paste a link” to import a fork or a copy you own.`,branchLabel:`Branch`,branchPlaceholder:`Select a branch`,branchesLoading:`Loading branches…`,cancel:`Cancel`,import:`Connect`,importing:`Connecting…`,forkAndImport:`Fork and connect`,copyAndImport:`Copy and connect`,pasteLabel:`Paste a link from GitHub.`,pasteLabelDescription:`Any GitHub repository, public or private.`,repoNotFound:`We couldn't find that repository. Check the link, or connect the account that owns it.`,grantAccess:`Give Base44 access`,copyNameLabel:`Your copy on GitHub`,copyNameDescription:`This app isn't yours, so Base44 creates a copy in your GitHub account.`,privateOriginalNote:`The original is private, so your fork will be private too.`,visibilityLabel:`Visibility`,forkPublicLabel:`Fork (public)`,forkPublicDescription:`Linked to the original, so you can send changes back to it.`,privateCopyLabel:`Private copy`,privateCopyDescription:`Only you can see and edit it. Not linked to the original project.`,invalidUrl:`Enter a public GitHub repo URL, e.g. https://github.com/owner/repo`,emptyRepository:`This repository is empty. Import an existing project with code in it.`,base44App:`Apps built in Base44 can't be imported here. Open the original app in Base44 to keep editing it.`,pasteImportFailed:`Couldn't import this repository. Make sure it's a public GitHub repo — or connect your GitHub account to import a private one.`,githubImportFailed:`Failed to import the repository. Make sure the Base44 GitHub app has access to it.`,libraryNameConflict:`A repository with this name already exists in your GitHub account. Choose another repository.`,libraryForkNotReady:`GitHub is still creating the fork. Try again in a moment.`,libraryAppAccessFailed:`Base44 can't access the new fork. Update the Base44 GitHub app's repository access, then try again.`,libraryImportFailed:`Couldn't fork and import this repository. Try again.`,unsupported:{mobileInFile:`This looks like a mobile app project ({{marker}} in {{source}}). Base44 only runs web and fullstack projects – import one of those instead.`,mobileAtRoot:`This looks like a mobile app project ({{marker}} at the repo root). Base44 only runs web and fullstack projects – import one of those instead.`,desktopInFile:`This looks like a desktop app project ({{marker}} in {{source}}). Base44 only runs web and fullstack projects – import one of those instead.`,desktopAtRoot:`This looks like a desktop app project ({{marker}} at the repo root). Base44 only runs web and fullstack projects – import one of those instead.`}},products:{tryMore:`More ways to build with Base44`,studio:{name:`Base Studio`,tagline:`Generate images and video`},agent:{name:`Base Superagent`,tagline:`Hand off your daily tasks`},code:{name:`Base Code`,tagline:`Work in code with your team`}
4,alphaBadge:`Alpha`}},Je={new:`New`,alpha:`Alpha`,topBar:{home:`Home`,allApps:`All apps`,baseCode:`Base Code`,apps:`Apps`,colony:`Colony`,integrations:`Integrations`,connectors:`Connectors`,appTemplates:`Templates`,workspaceHub:`Workspace hub`,studio:`Studio`,launchpad:`Launchpad`,basecamp:`Basecamp`,events:`Events`,community:`Community`,hirePartner:`Hire A Partner`,partnersChat:`Partners channels`,messages:`Messages`,affiliates:`Affiliates`,docsSupport:`Docs & Support`,admins:`Admins`,language:`Language`,startBuilding:`Start Building`},cantRadio:{label:`Can't Radio`,restore:`Restore`,minimize:`Minimize`,close:`Close Can't Radio`,previousTrack:`Previous track`,play:`Play`,pause:`Pause`,nextTrack:`Next track`,unmute:`Unmute`,mute:`Mute`,volume:`Volume`},createWorkspacePage:{title:`Create a Workspace`,subtitle:`Start collaborating with your workspace members`,back:`Back`,formTitle:`Workspace Information`,nameLabel:`Workspace name`,namePlaceholder:`Enter your workspace name`,nameRequiredError:`Workspace name is required`,createFailedError:`Failed to create workspace`,limitReachedError:`Workspace limit reached. You can create a maximum of 3 workspaces.`,creationRestrictedError:`Your organization manages workspace creation for your email domain. Ask a workspace admin to create one for you.`,cancelButton:`Cancel`,createButton:`Create workspace`,creatingButton:`Creating workspace...`,whatHappensNext:{title:`What happens next?`,ownerPermissions:`You'll be the workspace owner with full management permissions`,inviteMembers:`You can invite workspace members and manage seats`,accessDashboard:`Access your workspace dashboard to get started`}},workspaceMenu:{switchWorkspaceTooltip:`Switch workspace`,workspace:`Workspace`,appBuilder:`App builder`,backToWorkspace:`Back to {{workspaceName}}`,backToBaseCode:`Back to Base Code`,settings:`Settings`,inviteMembers:`Invite members`,addMembers:`Add members`,myWorkspaces:`My Workspaces`,createWorkspace:`Create a Workspace`,searchWorkspaces:`Search workspaces`,noWorkspacesFound:`No workspaces found`,lockedWorkspaceHint:`Sign in to access this workspace`,creationRestricted:`Your organization manages workspace creation for your email domain`,accountSettings:`Account preferences`,apiKey:`API Key`,helpSupport:`Help & support`,appearance:`Appearance`,themeNames:{light:`Light`,dark:`Dark`,system:`System`},becomeAffiliate:`Become an affiliate`,referFriend:`Refer a friend`,giftCards:`Gift Cards`,sendGiftCard:`Send a gift card`,logOut:`Log out`,aboutApp:`About the app`,winCredits:`Earn free credits`,pricingPlans:`Pricing plans`,documentation:`Documentation`,getHelp:`Get help`,memberCount_one:`{{count}} member`,memberCount_other:`{{count}} members`,myProfile:`My Profile`,viewProfile:`View profile`,buyCredits:`Buy credits`,failedToLoadProfile:`Failed to load profile`,user:`User`,tierPlan:`{{tier}} plan`,discordCommunity:`Discord community`,support:`Support`},agentEditorMenu:{renameAria:`Rename agent`,renameFailed:`Could not update the name. Try again.`},agentSwitcher:{triggerAria:`Switch agent`,triggerAriaNamed:`Switch agent: {{name}}`,recentAgents:`Recent agents`,createAgent:`Create new agent`,chooseWorkspace:`Choose workspace`,switchWorkspace:`Switch workspace`,backToAgents:`Back to agents`,workspaceFallback:`Workspace`,viewAll:`View all agents`,allAgentsTitle:`All agents`,searchAgentsPlaceholder:`Search agents`,noAgentsFound:`No agents found`,clearSearch:`Clear search`,loadFailed:`Couldn't load agents`,retry:`Retry`,filterCreatedByMe:`Created by me`,filterAgentsLabel:`Filter agents`,sortBy:`Sort by`,sortLastViewed:`Last viewed`,sortLastCreated:`Last created`,sortNameAsc:`Agent name A-Z`,sortNameDesc:`Agent name Z-A`,lastViewedAgo:`Last viewed {{timeAgo}}`,createdAgo:`Created {{timeAgo}}`,moreActions:`More actions`,moreActionsNamed:`More options for {{name}}`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,untitled:`Untitled Agent`,close:`Close`},credits:{integrationCredits:`Integration credits`,monthlyCredits:`Monthly Credits`,messageCredits:`Message credits`,dailyCredits:`Daily Credits`,giftCardCredits:`Gift Credits`,renewsAt:`Renews at {{date}}`,infoTooltipMessageCredits:`Message credits are used when you use AI chat or Superagent, including background tasks.`,infoTooltipIntegrationCredits:`Integration credits are used when your app runs Base44 services like LLM calls, uploads, emails, or in-app agents`,infoTooltipLearnMore:`Learn more about credit usage`,dailyLimitInline:`Daily limit: {{used}}/{{total}}`,renewAt:`Renews at {{date}}`,renewInHrMin:`Renews in {{hours}} hr {{minutes}} min`,renewInMin:`Renews in {{minutes}} minutes`,creditsUsedTooltip_one:`{{formatted}} credit used`,creditsUsedTooltip_other:`{{formatted}} credits used`,creditsLeftTooltip_one:`{{formatted}} credit left`,creditsLeftTooltip_other:`{{formatted}} credits left`,giftCardTooltip:`Gift card credits are used before your plan credits.`,percentUsed:`{{percent}}% used`,messagesRemaining_one:`{{count}} message remaining`,messagesRemaining_other:`{{count}} messages remaining`,upgradeYourPlan:`Upgrade your plan`,getMoreOutOfYourApps:`Get more out of your apps`,upgradeYourPlanToPro:`Upgrade your plan to Pro`,upgradeToTier:`Upgrade to {{tier}}`,redeemDescription:`Once you redeem, credits will be applied to your workspace.`,creditsRemaining_one:`{{count}} credit remaining`,creditsRemaining_other:`{{count}} credits remaining`,creditsCount_one:`{{count}} credit`,creditsCount_other:`{{count}} credits`,creditUsage:`Credit usage`,creditsLeft_one:`{{formatted}} left`,creditsLeft_other:`{{formatted}} left`,creditsLeftWithExtra:`{{formatted}} left +{{extra}}`,creditsUsed:`{{formatted}} used`,creditsUsedWithExtra:`{{formatted}} used +{{extra}}`,dailyLimitLeft:`Daily limit: {{formatted}} left`,upgrade:`Upgrade`,buyCredits:`Buy credits`,credits:`Credits`,dailyLimit:`Daily limit`,viewCreditUsage:`View credit usage`,outOfMessageCredits:`Out of message credits`,outOfCredits:`Out of credits`,yourLimit:`Your limit`,usedOfLimit:`{{used}} of {{limit}}
4 used`,showDetails:`Show details`,hideDetails:`Hide details`,redeemCoupon:{heroTitle_one:`{{count}} credit is waiting for you`,heroTitle_other:`{{count}} credits are waiting for you`,heroTitleIntegration_one:`{{count}} integration credit is waiting for you`,heroTitleIntegration_other:`{{count}} integration credits are waiting for you`,addToWorkspace_one:`Add it to {{workspace}} and start building.`,addToWorkspace_other:`Add them to {{workspace}} and start building.`,reservedForYou:`These credits were reserved for your account.`,selectWorkspace:`Select a workspace`,redeem:`Add credits`,notNow:`Not now`,backToWorkspace:`Back to workspace`,defaultWorkspace:`your workspace`,successTitle:`Credits added`,successDescription:`{{credits}} credits added to {{workspace}}.`,errorDescription:`This code cannot be redeemed. It may have expired, already been used, or reached its limit.`,errors:{generic:`This code cannot be redeemed.`,notFound:`Coupon code not found.`,expired:`This coupon code has expired.`,alreadyUsed:`You have already used this coupon code.`,maxedOut:`This coupon code has reached its limit.`,wrongDomain:`This coupon code is not valid for your email address.`,notAMember:`You are not a member of this workspace.`,wrongUser:`This coupon code is not valid for your account.`,workspaceAlreadyUsed:`This workspace has already used this coupon code.`,adminOnly:`Only a workspace owner or admin can add these credits.`}}},community:{label:`Community`,appTemplates:`App Templates`,appTemplatesDesc:`Start faster with community templates.`,hirePartner:`Hire a partner`,hirePartnerDesc:`Find partners and start collaborating.`,affiliateProgram:`Affiliate Program`,affiliateProgramDesc:`Become a Base44 affiliate.`,joinUsOn:`Join us on`},workspaceSettings:JSON.parse(`{"brands":{"actions":{"menuLabel":"Actions for {{name}}","edit":"Edit","setAsDefault":"Set as default","removeDefault":"Remove default","delete":"Delete"},"card":{"buttonSample":"Button","generating":"Generating","default":"Default"},"generationFailed":{"title":"Couldn't generate design system","description":"An unexpected error occurred while generating your design system, please try again.","dismiss":"Dismiss"}},"upgradePlan":"Upgrade plan","overview":{"viewOnlyBadge":"View only","viewOnlyTooltip":"Only owners and admins can edit these settings.","readOnlyNotice":"You have read-only access on this workspace. Plan and billing are managed by the workspace owner. Reach out to them for upgrades or billing questions.","readOnlyWorkspacePlan":"Workspace plan · {{plan}}","dataResidencyViewApps":"View app data residency","pageTitle":"Overview","pageSubtitle":"Manage your workspace details and settings.","generalTitle":"General","settingsTitle":"Settings","dataHostingTitle":"Data hosting","summaryCards":{"plan":"Plan","planRenews":"Renews {{date}}","freePlan":"Free","role":"Role","members":"Workspace members","viewPlanBilling":"View plan and billing","viewMembers":"View workspace members"},"roleDescriptions":{"owner":"Full control over this workspace and its apps","admin":"Manage workspace settings and members","editor":"Create and edit apps within this workspace","viewer":"View apps within this workspace","guest":"Access specific apps you've been invited to"}},"githubSection":{"pageTitle":"GitHub","pageSubtitle":"Keep your apps' code in sync with GitHub. Changes made in Base44 or in the repo show up in both places."},"governance":{"pageTitle":"Governance","pageSubtitle":"Configure app settings and visibility for your workspace","networkAccess":{"title":"Network access","description":"Control how traffic reaches and leaves this workspace's apps."},"dataInOut":{"intro":"Limits which messaging channels apps can use. Applies to every app in this workspace, including apps built later.","tabsAriaLabel":"Governance sections","tabGeneral":"General","tabDataInOut":"Data in & out","loadError":"Couldn't load the data policy. Try again.","updateError":"Couldn't save your change. Try again.","upgradeTitle":"Available on the Enterprise plan","upgradeDescription":"Upgrade your workspace to set and enforce a data in & out policy.","enforcement":{"title":"Workspace policy","dormantNotice":"This policy isn't being enforced – the Enterprise plan is no longer active for this workspace. Your settings are saved and take effect again once you upgrade.","turnOn":"Turn on","turnOff":"Turn off","turnOnAria":"Turn on policy","turnOffAria":"Turn off policy"},"channels":{"title":"Communication channels","accessColumn":"Acce
4ss","tooltip":"Choose to allow or block each messaging channel for the whole workspace. Blocking a channel stops messages in both directions.","accessAria":"Access for {{channel}}","reachAppAgentAndSuperagent":"Available to app agents and Superagent","reachSuperagent":"Available to Superagent only","reachEmail":"Available to every app — sign-in codes, receipts, and notifications"},"exceptions":{"cardTitle":"Policy exceptions","summary":"{{exceptions}} of {{total}} apps bypass the policy entirely and run unrestricted.","summaryUnknown":"Apps on this list bypass the policy entirely and run unrestricted.","summaryNone":"No workspace apps bypass the policy","addExceptionButton":"Add exception","addExceptionDisabledTooltip":"Turn on the workspace policy to add exceptions","emptyTitle":"No exceptions","emptyDescription":"Every app in the workspace follows the policy.","unknownApp":"Unknown app","removeAriaLabel":"Remove exception for {{appName}}","dialogTitle":"Add an exception","dialogDescription":"The selected app will skip the policy and keep using every channel.","searchPlaceholder":"Search apps…","noAppsFound":"No apps found","searchError":"Couldn't load apps. Try again.","searchRetry":"Try again","addError":"Couldn't add the exception. Try again.","appListAriaLabel":"Workspace apps","reasonLabel":"Reason","reasonPlaceholder":"Why does this app need to skip the policy?","addButton":"Add exception","cancelButton":"Cancel","emptyDescriptionPolicyOff":"While the policy is off, every app already runs unrestricted, so there's nothing to except. Once it's on, you can let specific apps skip it.","reasonOptional":"(optional)"},"categories":{"connectorsTitle":"Connectors","connectorsState":"Managed per connector on the Connectors page.","connectorsLink":"Manage","connectorsLinkHint":"Go to connectors governance"},"pageBanner":{"title":"What this page controls","body":"Your apps can message people outside this workspace, and be messaged by them. Blocking a channel stops messages in both directions. Once the policy is on, builders can't override it."}},"appTransfers":{"title":"App transfers","description":"Control who is allowed to move apps out of this workspace to another workspace.","optionAdminLabel":"Workspace admins and owners","optionAdminDescription":"Workspace admins and owners can move apps out","optionOwnerLabel":"Workspace owners only","optionOwnerDescription":"Only workspace owners can move apps out","optionNobodyLabel":"Disabled","optionNobodyDescription":"No one can move apps out of this workspace","saveSuccessTitle":"Settings updated","saveSuccess":"App transfer policy updated successfully","saveErrorTitle":"Error updating settings","saveError":"Failed to update app transfer setting"},"appMcp":{"title":"MCP access for AI assistants","description":"Controls whether apps in this workspace can expose an MCP server to AI assistants, and whether that server may be reached without signing in. Restricting this stops existing servers on their next request.","optionAllowLabel":"Allowed","optionAllowDescription":"Apps can expose an MCP server, with or without sign-in","optionOauthOnlyLabel":"Sign-in required","optionOauthOnlyDescription":"Apps can expose an MCP server, but assistants must sign in first","optionDisabledLabel":"Not allowed","optionDisabledDescription":"No app in this workspace can expose an MCP server","saveSuccessMessage":"Workspace settings updated successfully!","saveErrorMessage":"Failed to update workspace settings"},"appsSso":{"title":"Apps SSO","description":"Force apps in this workspace to use the workspace SSO provider. App-level authentication is disabled. Turning this off keeps workspace SSO on existing apps; only new apps use their own settings.","learnMoreWorkspaceAppAccess":"Learn more about workspace SSO for app access","saveSuccessTitle":"Settings updated","saveEnabled":"Apps must now use workspace SSO","saveDisabled":"Existing apps keep workspace SSO; new apps can configure their own authentication","saveErrorTitle":"Error updating settings","saveError":"Failed to update SSO enforcement setting","autoAdmitTitle":"Auto-admit SSO users in private apps","autoAdmitDescription":"Default for private apps that use SSO as their only sign-in method: anyone who signs in through SSO is admitted automatically, skipping the invite flow. Individual apps can override this.","loadError":"Couldn't load these settings.","retry":"Retry","autoAdmitSaveEnabled":"Private SSO-only apps now admit SSO users automatically by default","autoAdmitSaveDisabled":"Private apps no longer auto-admit SSO users by default"},"embedding":{"confirmTitle":"Change where apps can be embedded?","confirmDescription":"This applies to every app in this workspace.","confirmWarning":"Apps embedded on websites that aren’t on your list will stop working right away. Add any missing websites first.","confirmNoOneWarning":"Apps embedded on any website will stop working right away.","confirmApply":"Apply","confirmCancel":"Cancel","title":"App embedded in iframe","description":"Decide where the apps in this workspace can be embedded as an iframe.","anyone":"Anyone","anyoneDescription":"Any website can embed apps from this workspace.","allowlist":"Only these sites","allowlistDescription":"Only the websites you add can embed apps from this workspace.","noOne":"No one","noOneDescription":"No website can embed apps from this workspace.","fieldLabel":"Allowed websites","placeholder":"https://example.com","fixed":"Added as {{value}}.","fixedScheme":"Added as {{value}} – addresses need https:// or http:// in front.","fixedPath":"Added as {{value}} – embedding is allowed per website, not per page.","duplicate":"{{value}} is already on the list.","useHttp":"Use http:// instead","useSuggestion":"Use {{suggestion}}","schemeUnsupported":"Use http:// or https://. A website can't load over {{scheme}}://.","credentials":"Remove the username and password from the address.","wildcardPosition":"Put the wildcard at the start of the address, like https://*.example.com.","wildcardBroad":"Add a domain after the wildcard, like https://*.example.com. {{host}} on its own would let any website embed apps from this workspace.","port":"Use a port number up to 65535, like http://localhost:5173.","host":"Check the address for a typo, an extra space, or a missing dot.","empty":"Add at least one website, or set embedding to No one.","atMax":"You've reached the 50-website limit. Remove one to add another.","removeOrigin":"Remove {{origin}}","loadError":"Couldn't load embedding settings. Try again.","saveError":"Couldn't save embedding settings. Try again.","retry":"Try again"},"versionHistory":{"title":"Enable Backup & Restore","description":"When enabled, this workspace's data records are backed up automatically so admins can review them and restore to an earlier point in t
4ime."},"ipAllowlist":{"title":"IP Allowlist","description":"Restrict app access to approved IP addresses only. Anything not included in the list will be blocked automatically.","statusActive":"Active","statusEditing":"Editing","statusDisabled":"Disabled","ipAddressLabel":"IP address","ipAddressPlaceholder":"e.g. 192.168.1.5 or 192.168.1.0/24","noteLabel":"Note","notePlaceholder":"Optional description","addButton":"Add","columnIpAddress":"IP address","columnNote":"Note","removeLabel":"Remove","removeConfirmTitle":"Remove IP address","removeConfirmBody":"Remove {{ip}} from the allowlist? Access from this address will be blocked.","removeConfirmCancel":"Cancel","removeConfirmConfirm":"Remove","formatsHelp":"Valid formats: 192.168.1.5, 192.168.1.0/24, 192.168.1.5-192.168.1.50, or IPv6 (e.g. 2001:db8::1, 2001:db8::/32)","emptyListWarning":"When enabled with an empty list, all access will be blocked.","supportBypassNotice":"Authorized Base44 support staff may bypass these restrictions as part of support operations."},"githubOrgs":{"toast":{"errorTitle":"Error"}},"githubConnectionMode":{"title":"Choose how your team writes to GitHub","sharedLabel":"Shared connection","sharedDescription":"Everyone writes through the workspace's connection, without connecting an account of their own. Commits are authored by Base44, so GitHub can't show who made which change.","perUserLabel":"Per user connection","perUserDescription":"Each person connects their own GitHub account and gets the access GitHub already gives them. Commits carry their name. Anyone who hasn't connected can't change code.","readOnly":"Only workspace admins and owners can change this setting.","loading":"Loading GitHub connection mode","loadError":"Couldn't load the GitHub connection mode.","tryAgain":"Try again","saved":"GitHub connection mode updated","saveError":"Couldn't update GitHub connection mode","description":"Decides whether members need their own GitHub account to make changes. Applies to every app that syncs with GitHub. Base Code apps always use per user connections.","baseCodeHint":"Base Code apps always use this."},"githubInstallations":{"title":"Connected organizations","description":"Connect GitHub accounts or organizations as workspace resources. Apps in this workspace sync source code through these installations, and sync keeps working if the member who connected one leaves.","loadError":"Couldn't load the GitHub installations. Refresh to try again.","connect":"Add organization","reconnect":"Reconnect","disconnect":"Disconnect","table":{"name":"Organization","apps":"Apps","connectedBy":"Connected by","status":"Status","updated":"Updated","connectionDate":"Connection date","allowed":"Allowed"},"status":{"active":"Active","suspended":"Suspended","revoked":"Uninstalled","disconnected":"Disconnected","error":"Error"},"disconnectTitle":"Disconnect {{login}}?","disconnectConfirm":"Disconnect","disconnectCancel":"Cancel","disconnectBodyEmpty":"No apps are using this installation. The GitHub App stays installed on GitHub.","disconnectBody_one":"{{count}} app will stop syncing with GitHub. The GitHub App stays installed on GitHub.","disconnectBody_other":"{{count}} apps will stop syncing with GitHub. The GitHub App stays installed on GitHub.","dependentAppsLoading":"Checking connected apps…","dependentAppsError":"Couldn't load the connected apps. Close and try again.","deletedApp":"Deleted app","appsCountLabel_one":"{{count}} app syncs through this installation","appsCountLabel_other":"{{count}} apps sync through this installation","appsPopoverEmpty":"No apps sync through this installation.","toast":{"connected":"GitHub installation connected to the workspace.","connectError":"Failed to connect the GitHub installation. Please try again.","disconnected":"GitHub installation disconnected.","disconnectPartial":"Some apps could not be disconnected. Try again to finish.","disconnectError":"Failed to disconnect the GitHub installation. Please try again.","removed":"Organization removed from the workspace.","removeError":"Failed to remove the organization. Please try again."},"allowedHint":"Only affects new apps, not existing ones.","newReposBlocked":"New repos blocked","notSyncing":"Not syncing","notAllowed":"Not allowed","reconnectFirst":"Reconnect the organization first.","allowOrganization":"Allow new apps in {{login}}","disconnectedHint":"Connection removed. Apps aren't syncing.","activeHint":"Apps are syncing through this connection.","changeRepositories":"Edit repositories access","disconnectOrganization":"Disconnect organization","removeOrganization":"Remove organization","removeFirstDisconnect":"Disconnect the organization and its apps before removing it.","actions":"Actions for {{login}}","filter":{"all":"All","active":"Active","disconnected":"Disconnected"},"filterLabel":"Filter organizations","loading":"Loading connected organizations…","empty":"No connected organizations","noMatches":"No organizations match this filter.","policyError":"Couldn't load organization permissions. Refresh to try again.","stillSyncing_other":"Still used by {{count}} apps, which keep syncing.","stillSyncing_one":"Still used by {{count}} app, which keeps syncing."}}
4,"title":"Settings","backToHome":"Home","modal":{"close":"Close settings","openMenu":"Open settings menu"},"search":{"noResults":"No settings found"},"accessRestricted":{"title":"Access Restricted","adminsOnly":"You don't have permission to access this section for <bold>{{workspace}}</bold>. Only workspace administrators and owners can access this area.","adminsAndEditors":"You don't have permission to access this section for <bold>{{workspace}}</bold>. Only workspace administrators, owners, and editors can access this area.","goHome":"Go to Home"},"lockedFeature":{"github":{"title":"Connect your apps to GitHub","body":"Keep your app code in GitHub and manage connections across your workspace.","syncCode":"Sync app code with GitHub repositories","connectOrganizations":"Connect GitHub organizations to your workspace","manageRepositories":"Choose which repositories your workspace can access"},"includedInPlan":"Included in the {{plan}} plan and above","includedInPlanExact":"Included in the {{plan}} plan","viewPlans":"View Plans","talkToSales":"Talk to sales","integrations":{"title":"Set up once, use across your workspace","body":"For teams standardizing APIs and external tools across apps.","configureOnce":"Configure API integrations once for all apps and teammates","sharedAccess":"Let anyone in your workspace use connected tools instantly","consistentConnections":"Keep external connections consistent across every app"},"privateDataSources":{"title":"Connect private data sources","body":"For teams exposing internal databases and services to backend functions.","privateNetworkAccess":"Connect through a customer-managed Cloudflare tunnel","selectedApps":"Attach each source only to selected workspace apps","cloudflareTunnel":"Keep private endpoints off the public internet"},"appsConfiguration":{"title":"Set the rules for every app","body":"For teams that need control over how apps are published, accessed, and shared.","publishingRights":"Control publishing rights and app visibility by role or group","enforceSso":"Enforce workspace SSO across all apps","ipAllowlists":"Restrict access with IP allowlists","dataInOut":"Control how data flows in and out of your apps","adminOnlyActions":"Keep sensitive actions under admin control"},"appSecurityCenter":{"title":"Get a clear view of your app's security.","body":"A complete overview of your app's security is only available on the Enterprise plan.","riskVisibility":"See security posture and risks across every app","findingsTracking":"Track critical and high-risk findings in one place","ownershipUsage":"Review ownership, usage, and scan status per app"},"connectorGovernance":{"title":"Control connectors across your workspace","body":"Decide which connectors your team can use — and how members authenticate to them.","disableBuilderConnections":"Require members to connect with their own accounts","configurePerUserOauth":"Restrict shared credentials on sensitive connectors","seeAffectedAppsAndUsers":"Disable any connector across the workspace"},"analytics":{"title":"See how your team uses Base44","body":"For workspace owners and admins tracking usage and adoption.","creditTracking":"Track how credits are being used across your team","activeUsers":"See which teammates are actively using Base44","licenseUsage":"Understand how many licenses are currently in use"},"skills":{"title":"Give Your AI Reusable Skills","body":"Define consistent AI behavior that works across all your apps.","reusableInstructions":"Create a set of custom instructions (a skill) that shape how the AI builds your apps","autoActivation":"Create once, reuse across all your apps","teamConsistency":"Guide tone, formatting, logic, or any behavior you want to standardize"},"mcpConnections":{"title":"Connect external tools with MCP","body":"Bring live data from external tools directly into your apps.","externalTools":"Give your AI builder access to real-time context while it works","customServers":"Connect custom MCP servers to use across all your apps","extendCapabilities":"Access tools like Amplitude, Linear, and more while building"},"designSystems":{"title":"Give your apps a shared design system","body":"Define your brand's colors, fonts, and components once, and apply them across every app.","reuseAcrossApps":"Reuse one consistent brand across all your apps","fromAnySource":"Generate a design system from a website, Figma file, or your own materials","onBrandByDefault":"Keep colors, fonts, and components on brand automatically"},"groups":{"title":"Organize your members with Groups","body":"For teams assigning access to many members at once.","assignRoles":"Assign one role to an entire team at once","syncFromIdp":"Sync groups directly from Okta, Entra ID, or Google via SSO and SCIM","auditableRoles":"Keep roles directory-authoritative and auditable, with clear control over who gets access"},"staticEgress":{"title":"Route traffic from static IPs","body":"For teams whose providers only accept requests from known addresses.","fixedAddresses":"Send backend traffic from a fixed set of Base44 IPs","allowlistProviders":"Allowlist those addresses in the services your apps call","coversAllSurfaces":"Covers backend functions, app sandboxes, and OAuth"},"outboundWebhooks":{"title":"Send events as they happen","body":"Webhooks send signed HTTPS requests to your service when events occur in this workspace.","signedEvents":"Signed events you can verify","retries":"Automatic retries over 27 hours","noPolling":"No polling for changes"}},"membersTitle":"Members","inviteMembers":"Invite Members","inviteByEmail":"Invite by email","bulkInviteCsv":"Bulk invite (CSV)","close"
4:"Close","createInviteLink":"Create Invite Link","manageInviteLinks":"Manage Invite Links","moreActions":"More actions","inviteLinks":{"title":"Invite links","breadcrumb":"Invite Links","description":"Create and manage invite links for this workspace.","createInviteLink":"Create Invite Link","noLinksYet":"No invite links yet","noLinksSubtitle":"Create an invite link to easily share access to this workspace.","copyLink":"Copy Link","copied":"Copied","copyLinkLower":"Copy link","deleteTooltip":"Delete invite link","moreActions":"More actions","extendTooltip":"Extend expiration","extendButton":"Extend expiration","extendDialogTitle":"Extend link expiration","extendDialogDescription":"Set a new expiration for \\"{{name}}\\", counted from now.","extendConfirm":"Update expiration","expirationUpdated":"Invite link expiration updated.","linkDeleted":"Invite link deleted.","deleteButton":"Delete","deleteLinkButton":"Delete Link","deleteConfirmTitle":"Delete invite link?","deleteConfirmActive":"People won't be able to join using this link anymore. This action can't be undone.","deleteConfirmInactive":"This link and its history will be removed from this workspace.","copiedToClipboard":"Invite link copied to clipboard.","columnName":"Name","columnStatus":"Status","columnUsage":"Usage","columnRole":"Role","columnExpiration":"Expiration date","columnDomains":"Allowed domains","statusActive":"Active","statusRevoked":"Revoked","statusExpired":"Expired","statusLimitReached":"Limit reached","usageUnlimited":"Unlimited","dialogTitle":"Create invite link","dialogMobileTitle":"Create link","linkName":"Link name (Optional)","linkNamePlaceholder":"e.g., New Hire Onboarding","role":"Role","selectRole":"Select role","roleViewer":"Viewer","roleEditor":"Editor","roleMember":"Member","expiration":"Expiration","selectExpiration":"Select expiration","nDays_one":"{{count}} day","nDays_other":"{{count}} days","never":"Never","maximumUses":"Maximum uses","selectLimit":"Select limit","unlimited":"Unlimited","nUses_one":"{{count}} use","nUses_other":"{{count}} uses","allowedDomains":"Allowed email domains (Optional)","allowedDomainsPlaceholder":"e.g., company.com, partner.org","domainsHelp":"Separate multiple domains with commas.","domainsError":"Invalid entry. Use comma-separated domains (e.g., company.com, partner.org)","securityWarning":"Anyone with this link can join your workspace and access its data. Only share it with people you trust.","advancedOptions":"Advanced options","cancel":"Cancel","creating":"Creating...","create":"Create","linkCreatedAndCopied":"Invite link created and copied.","manageInvitations":"Manage invitations"},"postPaymentInvite":{"title":"You're all set","description":"Your plan is active. Invite your friends and colleagues to start building together.","createInviteLink":"Create invite link","inviteByEmail":"Invite by email","maybeLater":"Maybe later","inviteLinkReady":"Invite link ready","subtitleNoDomain":"Anyone with this link can join as <bold>{{role}}</bold>","subtitleWithDomain":"Anyone with a {{domains}} email can join as <bold>{{role}}</bold>","copied":"Copied","manageInvitationsPrompt":"You can manage all your invite links from the <inviteLink>Invite Links</inviteLink> settings page.","copyLink":"Copy","close":"Close","expires":"Expires {{time}}","remainingUses_one":"{{count}} use remaining","remainingUses_other":"{{count}} uses remaining"},"sections":{"workspace":"Workspace","integrations":"Integrations","account":"Account","general":"General","whiteLabel":"White label","accessIdentity":"Access & Identity","securityControl":"Security & Control","plugins":"Build tools","other":"Other","planBilling":"Plan & Billing"},"creditUsage":{"pageDescription":"Monitor your credit consumption and usage patterns.","pastDueDescription":"Your subscription payment is past due. Credits and limits shown are based on your last paid plan ({{plan}}).","tryAgain":"Try again","loadError":"Failed to load usage statistics","portalErrorTitle":"Error","creditsRenewIn":"Credits renew in {{timeLeft}}","expired":"Expired","dailyUsageTitle":"Daily Usage (Messages)","messagesLabel":"messages","timeDaysHours":"{{days}}d {{hours}}h","timeHoursMinutes":"{{hours}}h {{minutes}}m","timeMinutesSeconds":"{{minutes}}m {{seconds}}s","timeMinutes":"{{minutes}}m","creditsRenewInSegmentedDays":"{{days}}d : {{hours}}h : {{minutes}}m until credits renew","creditsRenewInSegmentedHoursMinutes":"{{hours}}h : {{minutes}}m until credits renew","creditsRenewCompact":"renews in {{timer}}"},"basicInformation":{"pageTitle":"Basic information","loadingMessage":"Loading workspace information...","workspaceNameLabel":"Workspace name","workspaceNamePlaceholder":"Enter workspace name","workspaceDescriptionLabel":"Workspace description","workspaceDescriptionPlaceholder":"Describe your workspace...","workspaceNameEmptyErrorMessage":"Workspace name cannot be empty","cancelButton":"Cancel","saveButton":"Save Changes","saveSuccessMessage":"Workspace settings updated successfully!","saveErrorMessage":"Failed to update workspace settings: {{error}}","unknownError":"Unknown error","superagentControl":{"title":"Disable Superagents","description":"When enabled, members of this workspace won't be able to create, access, or interact with Superagents.","saveSuccessMessage":"Workspace settings updated successfully!","saveErrorMessage":"Failed to update workspace settings"}},"byom":{"title":"Workspace MongoDB connection","description":"Runtime entity data for this workspace can use a customer-owned MongoDB cluster.","configuredUriLabel":"Configured URI","enabledChangeTitle":"Enabled connection changes are managed by Base44","enabledChangeDescription":"Once enabled, changing the BYOM MongoDB connection requires a managed migration/cutover process.","disableAvailableTitle":"No apps are using this connection yet","disableAvailableDescription":"You can disable BYOM until this workspace creates its first app. After app use, changes require a managed migration/cutover process.","connectionStringLabel":"MongoDB connection string","databaseNameAriaLabel":"MongoDB database name","databaseNameTooltip":"Database name is fixed to app_prod.","savedUriHelp":"The saved URI is stored as a workspace secret and is never shown again in raw form.","authTypeLabel":"Authentication method","authTypePassword":"Username & password","authTypeAwsIam":"AWS IAM (passwordless)","awsIamHelp":"No username or password needed. The URI must set authMechanism=MONGODB-AWS and authSource=$external, and Base44's IAM role must be registered in Atlas as an AWS IAM Role database user.","loadErrorTitle":"MongoDB connection settings could not be loaded","loadErrorDescription":"Try again before changing the workspace MongoDB connection.","status":{"enabled":"Enabled","validated":"Validated","notConfigured":"Not configured"},"actions":{"enable":"Enable","disable":"Disable","removeConfiguration":"Remove c
4onfiguration","retry":"Retry","validateAndSave":"Validate and save"},"toasts":{"saveTitle":"MongoDB connection saved","saveDescription":"The saved URI is shown only in redacted form.","errorTitle":"Error","saveError":"Failed to save MongoDB connection","enabledTitle":"BYOM enabled","enableError":"Failed to enable BYOM","disabledTitle":"BYOM disabled","disableError":"Failed to disable BYOM","removedTitle":"BYOM configuration removed","removeError":"Failed to remove BYOM configuration"}},"publishGovernance":{"publishingPermissions":"Publishing permissions","publishingPermissionsDescription":"Control who can publish apps and the visibility levels they can use.","roleBasedPublishingPermissions":"Role based publishing permissions","groupBasedPublishingPermissions":"Group based publishing permissions","groupBasedPublishingPermissionsDescription":"Members of these groups follow the group's rule instead of their role's.","groupColumnHeader":"Group","groupRulesEmptyTitle":"No group rules yet","groupRulesEmptyBody":"Everyone follows the role defaults above. Add a rule to give an existing workspace group its own publishing permissions.","manageGroups":"Manage groups","noGroupsEmptyTitle":"You don't have any workspace groups yet","noGroupsEmptyBody":"Group rules apply to groups that already exist. Create a group in Workspace groups, then come back to give it its own publishing permissions.","manageWorkspaceGroups":"Manage workspace groups","subject":"Role","canPublish":"Can publish","allowedAppVisibility":"Allowed visibility","defaultAppVisibility":"Default visibility","cannotPublish":"Publishing disabled","alwaysAllowed":"Always allowed","allVisibilities":"All","lockedOwnerTooltip":"Owners always have publish rights and can use any visibility level.","minVisibilityRequiredToast":"At least one visibility level is required.","resetToDefaults":"Reset to defaults","reset":"Reset","governanceFooterHint":"Subjects without publish rights will see Publish disabled and be prompted to contact an admin.","saveErrorTitle":"Error updating settings","saveErrorDescription":"Failed to update governance settings","addRule":"Add rule","addGroupTitle":"Add group rules","addGroupConfirm":"Add","memberCount_one":"{{count}} member","memberCount_other":"{{count}} members","inactiveBadge":"Inactive","inactiveIdpTooltip":"Identity-provider groups are turned off for this workspace, so this rule isn't applied.","removeGroupRule":"Remove","pickerEmptyTitle":"No groups to add","pickerEmptyDescription":"Create groups under Members and groups, or remove an existing rule to change it."},"leaveWorkspace":{"title":"Leave workspace","description":"If you leave this workspace, you will lose access to all associated apps. Ownership of your apps will be transferred to the workspace owner.","button":"Leave Workspace","ownerCannotLeaveNote":"Workspace owners can't leave their workspace.","successMessage":"You have left the workspace.","errorMessage":"Failed to leave workspace.","workspaceNameFallback":"workspace","dialog":{"title":"Leave {{name}}?","confirmQuestion":"Are you sure you want to leave <bold>{{name}}</bold>?","transferWarning":"Your apps in this workspace will be transferred to the workspace owner and you will lose access.","lastWorkspaceWarning":"This is your only workspace. You'll lose access to Base44 until an administrator invites you or provisions you again.","cancelButton":"Cancel","confirmButton":"Leave Workspace"}},"staticEgress":{"title":"Static egress IPs","description":"Route supported outbound traffic from this workspace through Base44's dedicated IPs. This can add latency and change the apparent request location.","toggleLabel":"Static egress","toggleDescription":"Routes backend functions, app sandboxes and supported OAuth requests through separate dedicated IP sets.","allowlistTitle":"IPs to allowlist","allowlistDescription":"Allowlist every displayed address and range so all 3 traffic types can connect.","rolloutProgress_one":"Updating {{completed}}/{{total}} app worker","rolloutProgress_other":"Updating {{completed}}/{{total}} app workers","publishPendingStatus_one":"App updates are partially complete. Publish {{count}} app to finish.","publishPendingStatus_other":"App updates are partially complete. Publish {{count}} apps to finish.","failedStatus_one":"Couldn't update {{count}} app worker","failedStatus_other":"Couldn't update {{count}} app workers","queuedStatus_one":"{{count}} app worker queued","queuedStatus_other":"{{count}}
4 app workers queued","updateNextBatch_one":"Update next {{count}} app worker","updateNextBatch_other":"Update next {{count}} app workers","affectedApps":"Affected apps","loadMore":"Load more","states":{"updating":"Updating","publishRequired":"Pending publish","failed":"Failed"},"openApp":"Open app","copyAppId":"Copy app ID","unavailableApp":"Deleted or unavailable app","retryFailedUpdates":"Retry updates","retryFailed":"Failed to retry app worker updates","rolloutInterrupted":"App worker updates were interrupted.","restartRollout":"Restart rollout","restartFailed":"Failed to restart the app worker rollout","nextBatchFailed":"Failed to start the next app worker update batch","failureReasons":{"timeout":"Worker deployment timed out.","compilation":"Worker compilation failed.","deployment":"Worker deployment failed.","publishRequired":"Publish this app and it will finish updating automatically."},"enabledToast":"Static egress enabled","disabledToast":"Static egress disabled","saveFailed":"Failed to update static egress","loadFailed":"Failed to load static egress settings","rolloutProgressLabel":"App worker update progress","retryLoad":"Try again","rowTitle":"Static outbound IPs","rowDescription":"Send all backend HTTPS traffic from a fixed set of Base44 IPs, so you can allowlist them in services that restrict incoming traffic. Doesn't cover direct TCP connections (like database drivers). May add latency.","statusDisabled":"Disabled","statusEnabling":"Enabling…","statusDisabling":"Disabling…","statusEnabled":"Enabled","statusAttention":"Attention","statusUnknown":"Unknown","statusPremium":"Premium","upgradeCta":"Upgrade","copyAll":"Copy all","copied":"Copied","viewApps":"View apps","hideApps":"Hide apps"},"privateDataSources":{"title":"Private data sources","description":"Give selected apps secure backend access to databases and HTTP services inside your network. Base44 manages the tunnel and nothing is exposed publicly.","actions":{"add":"Add data source","addType":"Add","viewType":"View","open":"Open data source actions","edit":"Edit data source","delete":"Delete","retryDelete":"Retry delete","retryCleanup":"Retry cleanup","retryProvisioning":"Retry provisioning","copyInstallCommand":"Copy install command","updateService":"Update service","finishSetup":"Finish setup","verifyHttpConnectivity":"Verify HTTP connectivity","checkDataSourceStatus":"Check data source status","verifyTcpConnectivity":"Verify TCP connectivity","httpConnectivityVerified":"HTTP connectivity verified","dataSourceStatusChecked":"Data source status checked","tcpConnectivityVerified":"TCP connectivity verified","httpConnectivityFailed":"HTTP connectivity check failed","dataSourceStatusFailed":"Data source status check failed","tcpConnectivityFailed":"TCP connectivity check failed"},"types":{"http":"HTTP service","mysql":"MySQL","mariadb":"MariaDB","postgres":"PostgreSQL","redis":"Redis","sqlserver":"Microsoft SQL Server","mongodb":"MongoDB","oracle":"Oracle","elasticsearch":"Elasticsearch"},"typeDescriptions":{"http":"APIs and web services","mysql":"Open-source relational database","mariadb":"MySQL-compatible relational database","postgres":"Relational database for complex workloads","redis":"In-memory key-value database","sqlserver":"Microsoft relational database","mongodb":"Document-oriented NoSQL database","oracle":"Oracle Database","elasticsearch":"Search and analytics engine"},"catalog":{"title":"Data source types","description":"Choose a type to view existing data sources or add a new one.","pickerTitle":"Add a private data source","pickerDescription":"Choose the database or service you want to connect.","empty":"No data source types are available."},"detail":{"title":"{{type}} data sources","sourcesTitle":"Sources","addTypeSource":"Add {{type}} source"},"status":{"setup_required":"Setup required","provisioning":"Provisioning...","active":"Active","error":"Error","deleting":"Deleting...","cleanup_blocked":"Cleanup blocked","lastCheckPassed":"Last check passed {{timeAgo}}.","lastCheckFailed":"Last check failed {{timeAgo}}: {{message}}"},"list":{"loading":"Loading data sources...","emptyTitle":"No private data sources configured","emptyDescription":"Add one to give selected apps secure backend access to private databases and HTTP services.","cleanupTitle":"Pending cleanup","cleanupDescription":"The
4se sources were deleted and will disappear after affected apps redeploy.","cleanupBlockedDescription":"Some sources need action before cleanup can finish."},"form":{"sourceType":"Source type","name":"Name","nameTooltip":"Backend functions in your apps use this name to identify the data source. If you rename it, update any functions that reference it.","nameTooltipAriaLabel":"About the source name","namePlaceholder":"Production API","host":"Host","hostPlaceholder":"api.internal.example.com","hostHelp":"Hostname or IP only — no scheme, path, or credentials.","hostHelpAriaLabel":"About the host","port":"Port","database":"Database","oracleServiceName":"Oracle service name","username":"Username","usernameOptional":"Username (optional)","password":"Password","passwordOptional":"Password (optional)","redisCredentialsHelp":"Optional. Use a password for requirepass, or a username and password for Redis ACL authentication.","removeCredentials":"Remove credentials","keepCredentials":"Keep credentials","credentialsWillBeRemoved":"The stored Redis credentials will be removed when you save.","passwordKeepPlaceholder":"Leave blank to keep current password","passwordEditHelp":"Stored encrypted and write-only. Leave blank to keep it, or enter a replacement.","passwordCreateHelp":"Stored encrypted and write-only — you can replace it later, never view it. Use a least-privilege account.","passwordHelpAriaLabel":"About the password","serviceUsesHttps":"Service uses HTTPS","appsWithAccess":"Apps with access ({{value}})","allApps":"All apps","allWorkspaceApps":"All workspace apps","allWorkspaceAppsDescription":"Current and future apps receive this binding.","searchApps":"Search apps","loadingApps":"Loading workspace apps...","noAppsFound":"No workspace apps found.","noAppsMatch":"No apps match your search.","allAppsAccessHelp":"Every current and future app in this workspace receives the binding.","selectedAppsAccessHelp":"Only selected apps receive the binding.","networkMode":"Network mode","networkModeDescription":"Backend functions can reach URLs behind this tunnel — for services that route requests across multiple private hosts.","networkModeHelpAriaLabel":"About network mode","networkModeWarning":"Network mode gives the selected apps broader access through this connector. Use it only when the service returns URLs on other private hosts."},"validation":{"nameRequired":"Name is required.","nameLength":"Name must be 80 characters or fewer.","hostRequired":"Host is required.","hostLength":"Host must be 255 characters or fewer.","hostInvalid":"Host must be a hostname or IP address without scheme, port, path, or wildcards.","hostWhitespace":"Host cannot contain whitespace.","portInvalid":"Port must be between 1 and 65535.","databaseRequired":"Database name is required.","databaseLength":"Database name must be 128 characters or fewer.","usernameRequired":"Username is required.","usernameLength":"Username must be 128 characters or fewer.","passwordRequired":"Password is required."},"wizard":{"newDataSourceWithType":"New {{type}} data source","stepSourceDetails":"Source details","stepInstallConnector":"Install the connector","updateCloudflareService":"Update Cloudflare service","stepProvision":"Provision","finishLater":"Finish later","cancel":"Cancel","continue":"Continue","back":"Back","updateService":"Update service","provision":"Provision","done":"Done","close":"Close"},"install":{"commandTitle":"Install command","intro":"Install <cloudflaredLink>cloudflared</cloudflaredLink>, then run this on one machine in your network that can reach <code>{{hostPort}}</code> (admin/root required):","requirementCloudflare":"Outbound access to Cloudflare on port 7844, UDP and TCP (falls back to TCP if UDP is blocked) — no inbound ports","requirementSingleConnector":"One connector host per data source","tokenHelp":"Contains a secret token — treat it like a password.","fetchInstallCommand":"Fetch install command","copyCommand":"Copy command","infraOwnerLeadIn":"Someone else installing it?","copyInstructions":"Copy instructions for your infra owner","requirementsTitle":"Requirements & how it works","howItWorks":"cloudflared registers as a 
4system service and keeps persistent outbound-only connections open to Cloudflare. Nothing in your network becomes publicly reachable.","finishLater":"Need it again? Copy it anytime from the data source list.","instructionsIntro":"We're connecting \\"{{name}}\\" to Base44 as a private data source.","instructionsStep1":"1. Pick one machine inside the network that (a) can reach {{host}}:{{port}}, (b) is not already running a Base44 connector — each data source needs its own host, and (c) has outbound access to Cloudflare on port 7844, UDP and TCP (falls back to TCP if UDP is blocked). No inbound ports.","instructionsStep2":"2. Install cloudflared: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel-api/#4-install-and-run-the-tunnel","instructionsStep3":"3. Run as admin/root:","instructionsFooter":"This registers cloudflared as a system service with outbound-only connections to Cloudflare. Nothing becomes publicly reachable. The command embeds a secret token — treat it like a password. The workspace admin can copy this exact command again anytime from Base44's data source list."},"provision":{"updating":"Updating Cloudflare service...","creating":"Creating private connectivity resources...","usuallySeconds":"This usually takes a few seconds","serviceUpdated":"Cloudflare service updated","sourceActive":"{{name}} is active","redeployAffectedApps":"Redeploy affected apps to apply the updated data source.","builderCanUseAll":"The app builder can now use it in backend functions for workspace apps.","builderCanUseSelected":"The app builder can now use it in backend functions for apps with access.","updateDescription":"Updating the Cloudflare service applies these connection changes without reinstalling the connector.","sqlDescription":"Provisioning creates the Cloudflare resources that connect this tunnel to your apps' backend functions. For {{type}}, that includes a managed connection pool created only after Cloudflare verifies it can reach your database through the tunnel.","redisDescription":"Provisioning creates the Cloudflare resources that connect this tunnel to your apps' backend functions. For Redis, that creates a private TCP service routed through the connector.","genericDescription":"Provisioning creates the Cloudflare resources that connect this tunnel to your apps' backend functions. For {{type}}, that creates a private service routed through the connector.","updatingConnector":"The installed connector can stay in place. Requests may fail until this update completes.","sqlOnlineRequirement":"The connector must be online and the credentials valid before you provision — Cloudflare connects to your database to verify them.","connectorNotOnlineYet":"The connector doesn't need to be online yet — requests will simply fail until it connects.","incomplete":"Provisioning did not complete. Finish setup, then try again.","failed":"Provisioning failed","retryUpdate":"Retry update","retry":"Retry","review":{"type":"Type","name":"Name","host":"Host","database":"Database","apps":"Apps","notRequired":"Not required","allWorkspaceApps":"All workspace apps","noAppsSelected":"No apps selected"}},"edit":{"title":"Edit data source","completeFields":"Complete the highlighted fields to continue.","calculatingImpact":"Calculating affected apps","setupWarning":"Connection changes are verified before the active source is replaced. Existing apps keep their current connection until the update is applied.","credentialRotationWarning":"Keep the old database credentials valid until the update has been applied to every app. You can revoke them in the database after the pending count reaches zero.","cancel":"Cancel","saveChanges":"Save changes","saveAndApply_one":"Save and apply to {{count}} app","saveAndApply_other":"Save and apply to {{count}} apps","saveAndRevoke_one":"Save and revoke from {{count}} app","saveAndRevoke_other":"Save and revoke from {{count}} apps","accessRevocationNotice_one":"{{count}} app will lose access to this data source and be redeployed automatically.","accessRevocationNotice_other":"{{count}} apps will lose access to this data source and be redeployed automatically.","updateServiceDescription":"Update the Cloudflare service to apply the change.","installConnectorDescription":"Install the connector to continue setup.","redeployDescription":"Redeploy affected apps to apply the change.","noSetupDescription":"No further setup is required."},"deleteDialog":{"title":"Delete {{name}}?","description_one":"Access will be removed automatically from {{count}} deployed app. Cloudflare resources and credentials are deleted after the affected app is updated.","description_other":"Access will be removed automatically from {{count}} deployed apps. Cloudflare resources and credentials are deleted after every affected app is updated.","loadingImpact":"Calculating affected deployed apps...","cancel":"Cancel","confirm":"Delete"},"routeDialog":{"title":"Replace the Cloudflare connection?","description":"Connection, routing, or Hyperdrive credential changes create and verify replacement Cloudflare resources. The installed connector stays in place, and existing apps keep their current connection until you apply the update.","cancel":"Keep editing","confirm":"Update service"},"allAppsDialog":{"title":"Grant access to all workspace apps?","description_one":"The {{count}} currently deployed app and every future app in this workspace will receive access to {{name}} automatically.","description_other":"All {{count}} currently deployed apps and every future app in this workspace will receive access to {{name}} automatically.","loadingImpact":"Calculating currently deployed apps...","permissionsWarning":"Anyone who can edit and deploy an app's backend functions can access everything permitted by this database user. Existing apps are not deployed unless you explicitly choose Apply.","cancel":"Keep selected apps","confirm":"Grant to all apps"},"rollout":{"unfinishedUpdate_one":"Update not yet applied to {{count}} app","unfinishedUpdate_other":"Update not yet applied to {{count}} apps","progress":"Applied to {{applied}} of {{total}} apps","failedCount_one":"{{count}} app update failed","failedCount_other":"{{count}} app updates failed","retryFailed":"Retry failed","apply_one":"Apply to {{count}} app","apply_other":"Apply to {{count}} apps","applyNext":"Apply to next {{batch}} of {{count}}","applying":"Applying...","removing":"Removing access from deployed apps...","removalPending":"Removal will resume automatically.","applyNow":"Apply now","retry":"Retry","retryableFailure":"Failed. Retry is available.","consistentFailure":"Fails consistently. The app's code may need changes."},"drawer":{"backendCodeExample":"Backend code example","cloudflareResources":"Cloudflare resources","allWorkspaceApps":"All workspace apps","noAppsSelected":"No apps selected"},"meta":{"allApps":"All apps","oneApp":"1 app","appsCount_one":"{{count}} app","appsCount_other":"{{count}} apps","missingHost":"Missing host","missingPort":"Missing port"},"redeploy":{"default":"Redeploy apps that use this source to apply the updated binding.","selectedMany_one":"Redeploy {{count}} selected app to apply the updated binding.","selectedMany_other":"Redeploy {{count}} selected apps to apply the updated binding.","selectedList":"Redeploy {{names}} to apply the updated binding."},"toasts":{"tryAgainLater":"Try again later.","loadFailed":"Failed to load private data sources","loadSourceTypesFailed":"Failed to load source types","loadAppsFailed":"Failed to load w
4orkspace apps","installCommandFailed":"Failed to create install command","createFailed":"Failed to create private data source","finishLater":"You can finish setup anytime from this list","provisionFailed":"Failed to provision private data source","updated":"Data source updated","updateFailed":"Failed to update data source","deleted":"Data source deleted","deleteFailed":"Failed to delete data source","cleanupFinishFailed":"Failed to finish cleanup","applyStarted":"Applying data source update","applyStartedDescription_one":"Started updating {{count}} app.","applyStartedDescription_other":"Started updating {{count}} apps.","applyFailed":"Failed to start app updates","installCommandCopied":"Install command copied","copyInstallCommandFailed":"Failed to copy install command","instructionsCopied":"Instructions copied — paste into Slack or email","copyInstructionsFailed":"Failed to copy instructions"}},"menu":{"basicInformation":"Basic information","brands":"Design system","planAndBilling":"Plan and billing","creditUsage":"Credit usage","membersAndGroups":"Members and groups","authAndSecurity":"Auth and security","integrations":"Integrations","privateDataSources":"Private data sources","staticEgress":"Static egress IPs","appsConfiguration":"Apps configuration","analytics":"Analytics","github":"GitHub","skills":"Skills","appSecurityCenter":"Security Center","platformSystemPrompt":"System Prompt","connectors":"Connectors","bankConnections":"Bank connections","governance":"Manage connectors","secrets":"Secrets","expandSection":"Expand section","collapseSection":"Collapse section","lockedTooltip":"This feature is available for {{plan}} users and above. Upgrade your plan to unlock access.","overview":"Overview","authentication":"Authentication","appsGovernance":"Governance","customIntegrations":"Custom integrations","profile":"Profile","builder":"Builder","planAndSubscriptions":"Plan & Subscriptions","billingHistory":"Billing History","webhooks":"Webhooks"},"guests":{"title":"Guests","emptyTitle":"No guests yet","promoted":"{{email}} promoted to {{role}}"},"groups":{"tabMembers":"Members","tabGroups":"Groups","tabGroupsViewerTooltip":"You need an editor role or higher to view groups.","roleReadOnlyTooltip":"Only workspace admins or owners can change group roles","workspaceRoleLabel":"Workspace role","createGroup":"Create group","addGroup":"Add custom group","namePlaceholder":"e.g. Editors","nameLabel":"Group name","nameRequired":"Enter a group name.","nameDuplicate":"A group named \\"{{name}}\\" already exists. Choose a different name.","tableTitle":"Groups ({{count}})","searchMemberOrGroup":"Search member or group...","columnName":"Name","columnType":"Type","columnMembers":"Members","columnRole":"Role","typeCustom":"Custom","typeIdp":"IDP","idpCardTitle":"Identity-provider groups","i
4dpSwitchLabel":"Use identity-provider groups","idpSwitchDescription":"Set up SSO in account preferences to enable identity-provider groups. Without it, you can still create custom groups and assign them roles.","idpSwitchDescriptionNoSso":"Once SSO is set up, enabling this assigns roles from your identity-provider groups. Disabling keeps roles on custom groups only.","idpNoSsoTooltip":"Set up SSO to enable","setUpSso":"Set up SSO","learnTitle":"Learn about groups","learnGroupsLabel":"Groups","learnGroupsBody":"Assign a workspace role to many people at once: every member of a group inherits its role. Members can belong to more than one group; if they do, they get the highest of their group roles. Groups can be synced from your identity provider or created directly in Base44.","learnDefaultRoleLabel":"Default role","learnDefaultRoleBody":"When someone signs in with SSO and isn't in any group, they receive the default role for SSO users. You can set this in <authLink>Authentication</authLink>","tableTitleTooltip":"Members can belong to more than one group; if they do, they get the highest of their group roles","idpConnectorDescription":"Groups synced from your identity provider appear in the list below. Assign each one a role.","idpConnectedBadge":"Connected","idpEnabledToast":"Identity-provider groups enabled","idpDisabledToast":"Identity-provider groups disabled","idpUpdateFailed":"Couldn't update identity-provider group settings","defaultRoleNoAccess":"No access","searchSummaryMembers_one":"{{count}} group with {{term}}","searchSummaryMembers_other":"{{count}} groups with {{term}}","searchSummaryNames_one":"{{count}} group matching “{{term}}”","searchSummaryNames_other":"{{count}} groups matching “{{term}}”","searchTooShortTitle":"Keep typing to search members","searchTooShortSubtitle":"Member search starts at two characters — group names filter from the first.","noAssignedRole":"No assigned role","viewGroup":"View group","membersSectionCount":"Members ({{count}})","addMemberToGroup":"Add to group","addedToGroup":"Added","closeLabel":"Close","noMembersYet":"No members in this group yet.","ownerCantJoinGroups":"The workspace owner can't be added to groups","detailsSection":"Group details","membersSection":"Members","descriptionLabel":"Group description","optionalMarker":"(optional)","descriptionPlaceholder":"Enter a short description of this group and what it's for","memberSearchAddPlaceholder":"Search by email or name to find or add members","memberSearchFindPlaceholder":"Search by email or name to find members","memberSearchNoMatches":"No workspace members match that name or email","removeMember":"Remove","back":"Back","you":"You","labelLabel":"Role","labelAdmins":"Admins","labelEditors":"Editors","labelViewers":"Viewers","groupActionsAria":"Actions for {{name}}","renameSave":"Save","deleteGroup":"Delete group","removeMemberAria":"Remove {{email}}","removedFromGroup":"{{name}} removed from '{{group}}' group","undo":"Undo","notInAnyGroupTitle":"{{name}} isn't in any group","notInAnyGroupSubtitle":"No results match \\"{{term}}.\\" Clear the search, or look on the Members page.","noMemberMatchesTitle":"No member matches \\"{{term}}\\"","noMemberMatchesSubtitle":"No one by this name is a member of this workspace. Check the spelling, or invite them to add them to a group.","noMemberMatchesSubtitleNoInvite":"No one by this name is a member of this workspace. Check the spelling.","addMemberToWorkspace":"Add member to workspace","clearSearch":"Clear search","loadMoreMembers":"Load more","inviteShortcut":"Invite members","cancel":"Cancel","createSuccess":"Group \\"{{name}}\\" created","updateSuccess":"Group \\"{{name}}\\" updated","deleteSuccess":"Group \\"{{name}}\\" deleted","deleteFailed":"Failed to delete group","saveFailed":"Failed to save group","roleUpdateSuccess":"Role updated for {{name}}","roleUpdateFailed":"Failed to update group role","deleteConfirmTitle":"Delete \\"{{name}}\\"?","deleteConfirmDescription":"Members keep their access, but their role will be recalculated from their remaining groups, or the workspace default. This action can't be und
4one.","emptyTitle":"No groups yet","emptySubtitle":"Manage access by team instead of one person at a time. Map a group to a role and everyone in it gets that access automatically.","errorTitle":"Couldn't load groups","errorSubtitle":"Something went wrong. Check your connection and try again.","retry":"Retry"},"members":{"pageTitleMembersAndGroups":"Members and groups","pageDescription":"View and manage members and roles for this workspace.","tableTitle":"Members ({{count}})","columnMembers":"Member","people":"People","columnEmail":"Email","columnStatus":"Status","columnCreditsUsed":"Monthly credits used","columnCreditLimit":"Credit limit","columnApps":"Apps","columnAgents":"Superagents","columnLastActive":"Last active","columnRole":"Role","managedByGroup":"Role is managed by group: {{names}}","managedByGroupGeneric":"Role is managed by group","roleOwner":"Owner","roleAdmin":"Admin","roleEditor":"Editor","roleViewer":"Viewer","roleGuest":"Guest","guestNotAssignableTooltip":"Guests are invited through a specific app. To make a member a guest, remove them from the workspace and invite them to an app.","guestRoleDescription":"Access to specific apps they're invited to","ownerNotAssignableTooltip":"A workspace has one owner. Ownership can't be assigned as a role.","guestPromotionTitle":"Promote {{email}} to {{role}}?","guestPromotionBody":"They'll get access to every app in this workspace instead of only the apps they're invited to. Members can't be switched back to guest – you'd have to remove them from the workspace and invite them to an app again.","guestPromotionConfirm":"Promote to {{role}}","guestPromotionCancel":"Cancel","removeMemberTitle":"Remove member?","removeMemberDescription":"<bold>{{email}}</bold> will no longer have access to this workspace, will lose collaborator access on all workspace apps, and will be fully removed from non-public apps.","removeMemberCancel":"Cancel","removeMemberConfirm":"Remove member","removeMemberSuccess":"{{email}} removed from the workspace","removeMemberFailed":"Couldn't remove {{email}}. Try again.","learnRolesTitle":"Learn about workspace roles","learnRolesLink":"Learn more","learnRoles":{"owner":"Full control over the workspace, its apps, billing, and members. Every workspace has one owner.","admin":"Manages workspace settings and members, and can create and edit every app.","editor":"Creates apps in this workspace and edits only the apps they own or collaborate on. Can invite collaborators.","viewer":"Views the apps they're added to as a collaborator without making changes, and can use apps shared with the workspace as an end user.","guest":"An external collaborator with access only to the specific apps they're invited to, not the entire workspace. Promoting a guest to a member is undone by removing them from the workspace and inviting them again."},"pending":"Pending","expired":"Expired","youBadge":"You","pendingBadgeTooltip":"Invitation sent but this person hasn't accepted it yet.","pendingBadgeTooltipExpires":"Invitation sent but this person hasn't accepted it yet. The invite expires on {{date}}.","expiredBadgeTooltip":"This invitation expired on {{date}} before it was accepted. Send a new invite to give this person access.","joined":"Joined","active":"Active","searchPlaceholder":"Search by name, email, or role...","inviteMembers":"Invite Members","setCreditLimit":"Set credit limit","addToGroup":"Add to group","addToGroupTitle_one":"Add {{count}} member to group","addToGroupTitle_other":"Add {{count}} members to group","searchGroupPlaceholder":"Search for a group","groupsCount_one":"{{count}} group","groupsCount_other":"{{count}} groups","noGroupsMatch":"No groups match your search","multiGroupNote":"A member can exist in more than one group","createNewGroup":"Create a new group","addToGroupSuccess_one":"Added to {{name}}","addToGroupSuccess_other":"Added to {{count}} groups","addToGroupFailed":"Failed to add to group","bulkUnsupportedGroupTitle":"Guests and pending invitees can't be added to groups. Deselect them to add the others","creditLimitMemberDescription":"Set a monthly credit limit for {{name}}. Leave empty to remove the limit.","defaultCreditLimitTitle":"Set monthly credit limit per user","defaultCreditLimitDescription":"Define a default monthly credit limit that applies to all workspace members. If you set an individual limit for a specific member, it will take priority over this default.","defaultCreditLimitHelper":"This limit takes effect immediately and does not change automatically.","clearLimit":"Clear limit","saveLimitChanges":"Save changes","defaultCreditLimitEditValue":"Credit limit: {{limit}}","defaultCreditLimitSetToast":"Default credit limit set to {{limit}}","defaultCreditLimitRemovedToast":"Default credit limit removed","defaultCreditLimitFailedToast":"Failed to update default credit limit","creditLimitSetToast":"Credit limit set to {{limit}} for {{email}}","creditLimitRemovedToast":"Credit limit removed for {{email}}","creditLimitFailedToast":"Failed to update credit limit for {{email}}","setDefaultCreditLimit":"Set default credit limit","removeMember":"Remove member","agencyPartnerBadge":"Partner","agencyPartnerBadgeTooltip":"This workspace sponsors them as an agency partner, so they can join the Partner Program without the usual requirements.","upgradeAgencyPartnerTooltip":"Upgrade to Pro to make workspace members agency partners.","makeAgencyPartner":"Make agency partner","removeAgencyPartner":"Remove agency partner","agencyPartnerRemovedToast":"{{email}} is no longer an agency partner","agencyPartnerRemoveFailedToast":"Couldn't remove {{email}} as an agency partner","agencyPartnerGrantedToast":"{{email}} can now join the Partner Program as an agency partner","agencyPartnerFailedToast":"Couldn't make {{email}} an agency partner","pendingPillLabel_one":"{{count}} Pending","pendingPillLabel_other":"{{count}}
4 Pending","pendingPillAria":"Filter by pending invites","pendingPillTooltip":"Show only pending invites","pendingPillTooltipActive":"Show all members","memberAppsError":"Couldn't load apps. Try again.","memberAppsEmpty":"No apps yet","memberAgentsError":"Couldn't load Superagents. Try again.","memberAgentsEmpty":"No Superagents yet","memberAppsMore":"+{{more}} more","memberAppsOwnedBy":"Apps owned by {{name}}","memberAppsSharedWith":"Apps shared with {{name}}","memberAgentsOwnedBy":"Superagents owned by {{name}}","memberAgentsSharedWith":"Superagents shared with {{name}}","appsRevealAria":"Show {{count}} apps owned by {{name}}","appsRevealGuestAria":"Show {{count}} apps {{name}} owns or can access","agentsRevealAria":"Show {{count}} Superagents owned by {{name}}","agentsRevealGuestAria":"Show {{count}} Superagents {{name}} owns or can access","resendInvite":"Resend invite","resendInviteSuccess":"Invitation resent to {{email}}","resendInviteFailed":"Couldn't resend the invitation to {{email}}","bulkResendSuccess_one":"Invitation resent to {{count}} member","bulkResendSuccess_other":"Invitations resent to {{count}} members","bulkResendFailed_one":"Couldn't resend the invitation to {{count}} member","bulkResendFailed_other":"Couldn't resend the invitations to {{count}} members","bulkUnsupportedResendTitle":"Only pending member invitations can be resent. Deselect joined members and guests to resend the rest.","bulkSelectedCount_one":"{{count}} selected","bulkSelectedCount_other":"{{count}} selected","bulkScopeCapped":"First {{count}} members","bulkScopeAll":"All {{count}} members","bulkScopeAllWarning":"Limits some bulk actions","results_one":"{{count}} Result","results_other":"{{count}} Results","bulkChangeRole":"Change role","bulkMoreActions":"More actions","bulkRemove":"Remove from workspace","bulkRoleSuccess_one":"Role updated for {{count}} member","bulkRoleSuccess_other":"Role updated for {{count}} members","bulkRoleFailed_one":"Couldn't update role for {{count}} member","bulkRoleFailed_other":"Couldn't update role for {{count}} members","bulkRoleSkipped_one":"{{count}} member wasn't changed (its role is managed by a group or changed during the update)","bulkRoleSkipped_other":"{{count}} members weren't changed (their roles are managed by a group or changed during the update)","bulkCreditSuccess_one":"Credit limit updated for {{count}} member","bulkCreditSuccess_other":"Credit limit updated for {{count}} members","bulkCreditFailed_one":"Couldn't update credit limit for {{count}} member","bulkCreditFailed_other":"Couldn't update credit limit for {{count}} members","bulkCreditSkipped_one":"{{count}} member's credit limit wasn't changed (their role or membership changed during the update)","bulkCreditSkipped_other":"{{count}} members' credit limits weren't changed (their roles or membership changed during the update)","bulkRemoveSuccess_one":"{{count}} member removed","bulkRemoveSuccess_other":"{{count}} members removed","bulkRemoveFailed_one":"Couldn't remove {{count}} member","bulkRemoveFailed_other":"Couldn't remove {{count}} members","bulkUnsupportedRoleTitle":"Your role, the owner's, and group-managed roles can't be changed. Deselect them to apply changes to the rest.","bulkUnsupportedCreditTitle":"Viewers can't have credit limits. Deselect them to apply limits to the others.","bulkUnsupportedRemoveTitle":"You can't remove owners from the workspace. Deselect them to remove the others","bulkTooManySelected":"Select {{max}} or fewer members to use bulk actions.","bulkAllMatchingSelected_one":"All {{count}} member selected","bulkAllMatchingSelected_other":"All {{count}} members selected","selectAllMatchingFailed":"Couldn't load all members. Please try again.","exportTooMany":"You can export at most {{max}} members at once. Narrow the filter and try again.","bulkAdminGuestBlocked":"Guests can't be made admins. Deselect guests to assign the admin role.","bulkStripUnsupported_one":"Deselect {{count}} person","bulkStripUnsupported_other":"Deselect {{count}} people","selectAllAria":"Select all members","selectRowAria":"Select {{name}}","bulkRemoveTitle_one":"Remove {{count}} member?","bulkRemoveTitle_other":"Remove {{count}} members?","bulkRemoveDescription_one":"This member will no longer have access to this workspace, will lose collaborator access on all workspace apps, and will be fully removed from non-public apps.","bulkRemoveDescription_other":"These members will no longer have access to this workspace, will lose collaborator access on all workspace apps, and will be fully removed from non-public apps.","bulkCreditDescription_one":"Set a monthly credit limit for {{count}} member. Leave empty to remove the limit.","bulkCreditDescription_other":"Set a monthly credit limit for {{count}} members. Leave empty to remove the limit.","creditLimitPlaceholder":"e.g. 1000","creditLimitExceeds":"Cannot exceed workspace limit of {{limit}} credits.","cancel":"Cancel","save":"Save","roleUpdateFailed":"Failed to update role","roleUpdateSuccess":"Role changed for {{email}}","undo":"Undo","upgradeTooltip":"Upgrade to the Enterprise plan to unlock this feature","upgradeAdvancedRolesTooltip":"Upgrade to Enterprise plan for advanced roles","upgradeCreditLimitTooltip":"Upgrade to Enterprise to set per-member credit limits.","talkToSales":"Talk to sales","default":"(default)","creditLimitDefault":"{{limit}}
4 (default)","emptyTitle":"No workspace members yet","emptyTitleNoResults":"No members found","emptySubtitleShared":"Start by inviting your first workspace member","emptySubtitleNoResults":"No members match \\"{{searchTerm}}\\"","creditLimitTooltip":"Limit how many credits each member can use from the workspace pool. Set limits individually or distribute evenly across all members.","appsTooltip":"Number of apps this person owns in this workspace. For guests, also the apps shared with them.","agentsTooltip":"Number of Superagents this person owns in this workspace. For guests, also the Superagents shared with them.","clearSearch":"Clear search","loadingMembers":"Loading members…","errorTitle":"Couldn't load members","errorSubtitle":"Something went wrong. Check your connection and try again.","retry":"Retry","summaryCards":{"creditsUsageTooltip":"Credits used by this workspace in the current billing cycle.","topBuildersTooltip":"The 3 members who used the most credits this billing cycle.","members":"Workspace members","creditsUsage":"Credits Usage","topBuilders":"Top builders","guests":"Guests","creditsSummary":"{{percent}}% used · {{remaining}} remaining","creditsUnlimited":"Unlimited","topBuildersAdminOnly":"Available to workspace admins","topBuildersAdminOnlyAria":"Top builders are visible to workspace admins","topBuildersEmpty":"No activity in the last 30 days","guestsSubtitle":"External collaborators","viewCreditUsageTooltip":"View workspace credit usage","rolesAria":"Members by role","roleCountAriaLabel":"{{count}} {{roleLabel}}","roleOwnerFoldLabel_one":"Owner","roleOwnerFoldLabel_other":"Owners","roleAdminFoldLabel_one":"Admin","roleAdminFoldLabel_other":"Admins","roleEditorFoldLabel_one":"Editor","roleEditorFoldLabel_other":"Editors","roleViewerFoldLabel_one":"Viewer","roleViewerFoldLabel_other":"Viewers"},"export":{"ariaLabel":"Export members CSV","allPeople":"All people","currentFilter":"Current filter","failed":"Failed to export members","onlySelected":"Only selected"},"loadingMore":"Loading...","loadMore":"Load more","emptySubtitleNoFilterResults":"No members match the selected filters","filters":{"filter":"Filter by","role":"Role","inviteStatus":"Invite Status","inviteStatusHeading":"Invite","creditsUsed":"Credits used","creditLimitSet":"Custom credit limit","apps":"Apps","appsHeading":"Number of apps","agents":"Agents","lastActive":"Last active","roleAriaLabel":"Filter by role","inviteStatusAriaLabel":"Filter by invite status","allInviteStatuses":"All invite statuses","creditsBucketNoUsage":"No usage (0)","creditsBucketBelowAverage":"Below average","creditsBucketAboveAverage":"Above average","creditsBucketTop10":"Top 10% of consumers","yes":"Yes","no":"No","clearAll":"Clear filters","title":"Filters","clearFilter":"Clear filter","showResults":"Show all results","clear":"Clear","close"
4:"Close","filteredBy":"Filtered by:","chipLabelWithValues":"{{title}}: {{values}}","chipLabelWithCount":"{{title}}: {{count}}","showMore_one":"+{{count}} more","showMore_other":"+{{count}} more","filtersApplied_one":"{{count}} filter applied","filtersApplied_other":"{{count}} filters applied","numberFilter":{"selectPlaceholder":"Select number","lessThan":"At most","greaterThan":"At least","between":"Range","equalTo":"Exact","from":"From","to":"To","numberPlaceholder":"Number"},"dateFilter":{"selectPlaceholder":"Select date","pastWeek":"in the last 7 days","pastMonth":"in the last 30 days","past90Days":"in the last 90 days","afterDate":"is or after","beforeDate":"is or before","betweenDates":"is between","from":"From","to":"To"}},"pageTitle":"Members"},"seatsAndMembers":{"pageTitle":"Seats and members","pageDescription":"Manage workspace seats and team members.","emptyTitle":"Get Started with Workspace Seats","emptyDescription":"Purchase seats to invite workspace members and start collaborating.","seatsAvailable_one":"{{count}} seat available","seatsAvailable_other":"{{count}} seats available"},"bulkInvite":{"title":"Bulk Invite Members","subtitle":"CSV file must include the columns email and role.","downloadTemplate":"Download template","dropPrompt":"Drag a CSV file here or click to upload","dropHint":"CSV files only","defaultRole":"Default Role","defaultRoleTooltip":"If a member’s role is missing in the CSV, this default role will be applied.","preview":"Preview","columnEmail":"Email","columnRole":"Role","cancel":"Cancel","invite":"Invite","inviteCount_one":"Invite {{count}} Member","inviteCount_other":"Invite {{count}} Members","errorNotCsv":"Please upload a CSV file","errorEmpty":"CSV file is empty","errorNoEmailColumn":"CSV must contain an \\"email\\" column","errorNoValidEmails":"No valid email addresses found in CSV","errorTooManyRows":"CSV has {{count}} rows — the maximum is {{max}} invitations per upload. Split the file and upload in batches.","errorParsing":"Error parsing CSV file: {{message}}","errorReadFailed":"Failed to read file","errorNoFile":"Please upload a CSV file","errorNoInvitations":"No valid invitations to send","errorTiersLoading":"Loading plan details, please try again in a moment","errorSendFailed":"Failed to send bulk invitations"},"inviteDialog":{"title":"Invite Members","emailAddress":"Email Address","emailPlaceholder":"Enter emails, separated by commas","chooseRole":"Choose role","removeEmail":"Remove {{email}}","upgrade":"Upgrade","role":"Role","cancel":"Cancel","invite":"Invite","inviting":"Inviting...","roleViewer":"Viewer","roleEditor":"Editor","roleAdmin":"Admin","roleMember":"Member","errorNoEmail":"Please enter at least one email address","errorInvalidEmail":"One or more email addresses are invalid.","errorFallback":"Failed to invite users","toastSingle":"Invitation sent to {{email}}","toastMultiple":"{{count}} invitations sent successfully","groupAttachNote":"They'll be added to the {{group}} group once they accept the invitation."},"dataResidency":{"title":"Data residency","tooltip":"Sets the data storage region for apps in this workspace.","edit":"Edit","planTooltip":"Data residency is available on {{plan}} plans and above","upgradeRequired":"Your plan doesn't include data residency. Upgrade your plan to change it.","upgradeOwnerOnly":"Your plan doesn't include data residency. Only the workspace owner can upgrade it.","changeRestricted":"Only owners and admins can change data residency.","viewRestricted":"Only owners and admins can view app data residency.","appliesToNewApps":"New apps' users' data will be stored in the chosen location.","editModal":{"title":"Workspace data residency","description":"Choose the location where new apps' users' data will be stored.","label":"Data residency","cancel":"Cancel","save":"Save","saving":"Saving...","updateSuccess":"Data residency updated successfully","updateError":"Failed to update data residency: {{detail}}","unknownError":"Unknown error"},"appsModal":{"title":"App data residency","description":"See where data is stored for each app in this workspace.","appName":"App name","dataRegion":"Data region","loading":"Loading...","noApps":"No apps in this workspace.","loadError":"Couldn't load app data residency. Please try again.","migrationInfo":"Need to move an app to a different region? <a>Request a migration.</a>
4","supportTitle":"Data region migration request — {{name}}","supportContent":"I'd like to migrate app data to a different region.\\n\\nWorkspace: {{name}} ({{id}})\\nCurrent default region: {{region}}\\nTarget region: \\nApps to migrate: "}},"mcp":{"title":"MCP Connections","addMcp":"Add MCP","limitReached":"You've reached the limit of {{max}} MCP servers. Remove one to add a new connection.","description":"Connect custom MCP servers to extend Base44's building capabilities with external tools and data.","pageDescriptionWithLink":"Connect MCP servers to give Base44 new tools and data to build with. <a>Learn more</a>","learnMore":"Learn more","emptyTitle":"No MCP server connected yet","emptyStateTitle":"Connect your first MCP server","emptyStateDescription":"Bring your own tools and data into the builder - connect a custom server to get started.","addCustomMcp":"Add custom MCP","aria":{"enableConnection":"Enable {{name}}","disableConnection":"Disable {{name}}","actionsFor":"Actions for {{name}}"},"actions":{"editDetails":"Edit Details","removeMcp":"Remove MCP"},"deleteConfirm":{"title":"Remove MCP Connection","description":"Are you sure you want to remove \\"{{name}}\\"? This action cannot be undone.","confirm":"Remove","cancel":"Cancel"},"tools":{"availableTools_one":"{{count}} available tool","availableTools_other":"{{count}} available tools","more":"+{{count}} more","showLess":"Show less","loadingTools":"Loading tools..."},"addDialog":{"title":"Add custom MCP server","name":"Name","namePlaceholder":"i.e., My MCP Server","url":"URL","urlExists":"MCP Server already exists.","authentication":"Authentication","authNone":"Not required","authNoneDescription":"Connect without credentials","authOAuth":"OAuth","authOAuthDescription":"Authorize in the next step","customHeaders":"Custom Headers","optional":"optional","headersDescription":"Add headers that will be sent with every request (e.g., API keys)","headerName":"Header name","headerValue":"Value","addHeader":"Add Header","removeHeader":"Remove header","connectionFailed":"Connection failed","serverReady":"MCP server is ready to connect.","serverReadyWithTools_one":"MCP server is ready to connect. 1 tool found.","serverReadyWithTools_other":"MCP server is ready to connect. {{count}} tools found.","toolsFound_one":"{{count}} tool found.","toolsFound_other":"{{count}} tools found.","oauthConfirmed":"Server confirmed. Click \\"Authorize & Add\\" to complete OAuth authentication.","test":"Test","testAndAdd":"Test & Add","authorizeAndAdd":"Authorize & Add","cancel":"Cancel","urlRequired":"Please enter a server URL.","fieldsRequired":"Please fill in all required fields.","authRequired":"Authentication is required for this server. Select OAuth to continue.","authNotRequired":"This server does not require OAuth. Try adding without OAuth.","testFailed":"Connection test failed."},"editDialog":{"title":"Edit connected MCP","enabled":"Enabled","nameRequired":"Please enter a name.","changeInfo":"To change the URL or authentication method, create a new MCP connection.","saveChanges":"Save Changes","removeMcp":"Remove MCP","cancel":"Cancel"},"toast":{"added":"MCP connection added","addedDescription":"Successfully connected to the MCP server.","addedWithName":"Successfully added \\"{{name}}\\" connection.","saved":"Changes saved","savedDescription":"MCP connection updated successfully."}},"skills":{"title":"Skills","yourSkills":"Your skills","addSkill":"Add skill","editSkill":"Edit Skill","viewSkill":"View Skill","deleteSkill":"Delete Skill","limitReached":"You've reached the limit of {{max}} skills. Remove one to add a new skill.","description":"Create reusable instruction sets that the AI builder can activate during conversations.","emptyDescription":"Skills are saved guidelines that shape how the AI builds your apps. They activate when needed to follow your rules and best practices automatically.","pageDescriptionWithLink":"Skills are your saved rules and best practices. Base44 applies them automatically while it builds, so every app follows your standards. <a>Learn more</a>","getStartedWithTemplate":"Get started with a template","viewMore":"View more","addTemplate":"Add","addTemplateNamed":"Add {{name}}","failedToLoadTemplates":"Failed to load skill templates","templatesUnavailable":"Preset templates may be unavailable.","failedToLoadTemplate":"Failed to load template","adminOnlyToggleTooltip":"Only workspace admins can turn workspace skills on or off","scope":{"label":"Scope","personal":"Personal","workspace":"Workspace","hint":"Only you can see and use personal skills, and only in this workspace. Using one in a chat adds its instructions to that conversation, where teammates can read them. Workspace skills are shared with everyone in the workspace.","memberHint":"This skill will be personal – only you can see and use it, and only in this workspace. Using it in a chat adds its instructions to that conversation, where teammates can read them. Only workspace admins can create shared skills.","personalTooltip":"Only you can see and use this skill"},"form":{"skillName":"Skill Name","namePlaceholder":"e.g. brand-guidelines","nameRequired":"Name is required","nameMaxLength":"Name must be at most {{max}} characters","namePattern":"Lowercase letters, numbers, and hyphens only (e.g. co
4de-review)","nameExists":"A skill with this name already exists","description":"Description","descriptionHint":"Tell the agent when to use this skill. It reads this to decide whether to activate it.","descriptionPlaceholder":"e.g. Enforces brand colors, typography, and design patterns across all pages and components. Use when creating new pages, updating styling, or when the user mentions the brand or design system.","instructions":"Instructions","instructionsHint":"The step-by-step rules your agent follows when this skill activates. Write it like you're training a new team member.","instructionsPlaceholder":"## Brand Colors\\nPrimary: #1E40AF (navigation, buttons)\\nAccent: #F59E0B (highlights, CTAs)\\nBackground: #F8FAFC, Surface: white\\n\\n## Typography\\nHeadings: bold, dark slate\\nBody: text-sm text-slate-600\\nUse consistent spacing between sections\\n\\n## Component Patterns\\n- Use Card with subtle shadow for data sections\\n- Always include loading and empty states\\n- Forms: use Sheet dialogs for create/edit flows\\n- Tables: striped rows, sortable columns","reviewHint":"Refined by AI. Feel free to adjust before saving."},"dialog":{"reviewTitle":"Review your skill","reviewSubtitle":"Check the description and instructions before saving. You can edit this anytime.","back":"Back","pickerTitle":"Add skill or start from scratch","startFromScratch":"Start from scratch","cancel":"Cancel","backToOriginal":"Back to Original","saveSkill":"Save Skill","saveChanges":"Save Changes","refineAndReview":"Refine & Review","close":"Close","add":"Add","enabled":"Enabled"},"toast":{"created":"Skill created","createdDescription":"\\"{{name}}\\" has been added.","failedToCreate":"Failed to create skill","updated":"Skill updated","updatedDescription":"\\"{{name}}\\" has been saved.","failedToUpdate":"Failed to update skill","refinedTooLong":"Refined skill is too long","refinedTooLongDescription":"We tried to condense it but the result still exceeds the character limit. Try shortening your content and refining again.","failedToPolish":"Failed to polish skill","failedToLoad":"Failed to load skill","failedToLoadList":"Failed to load skills","retryLater":"Please try again later.","retryAgain":"Please try again.","removed":"Skill removed","removedDescription":"The skill has been removed."},"deleteConfirm":{"description":"Are you sure you want to delete \\"{{name}}\\"? This action cannot be undone.","confirm":"Delete","cancel":"Cancel"},"aria":{"enableSkill":"Enable {{name}}","disableSkill":"Disable {{name}}","actionsFor":"Actions for {{name}}"}},"secrets":{"title":"Secrets","description":"Manage credentials and access tokens for programmatic access to your workspace.","tabs":{"apiKeys":"Workspace API Keys","personalTokens":"Personal access tokens","apiKeysDisabledTooltip":"Only workspace admins on an eligible plan can manage Workspace API Keys."},"apiKeys":{"title":"API keys","description":"Create and manage API keys for programmatic access to your workspace. Use these keys to stream audit logs, connect your identity provider via SCIM, or pull workspace data into an external system via the Monitoring API.","tableSubtitle":"Stream audit logs, connect SCIM, or pull data via the Monitoring API.","createButton":"Create API Key","limitReached":"You've reached the maximum limit of {{max}} API keys. Delete an existing key to create a new one.","table":{"name":"Name","key":"Key","createdBy":"Created by","created":"Created","lastUsed":"Last Used","status":"Status","never":"Never"},"status":{"active":"Active","disabled":"Disabled"},"emptyState":{"title":"No API keys yet","description":"Workspace API keys give programmatic access to your workspace APIs (SIEM, SCIM, custom integrations)."},"actions":{"edit":"Edit","disableKey":"Disable key","enableKey":"Enable key","deleteKey":"Delete key","actionsFor":"Actions for {{name}}"},"disableConfirm":{"title":"Disable API Key?","description":"The API key <strong>\\"{{name}}\\"</strong> will be immediately disabled. Any integrations using this key will stop working.","note":"You can re-enable it later.","confirm":"Disable Key","cancel":"Cancel"},"enableConfirm":{"title":"Enable API Key?","description":"The API key <strong>\\"{{name}}\\"</strong> will be re-enabled. Integrations using this key will resume working.","confirm":"Enable Key","cancel":"Cancel"},"deleteConfirm":{"title":"Delete API Key?","description":"The API key <strong>\\"{{name}}\\"</strong> will be permanently deleted. This action cannot be undone. Any integrations using this key will stop working immediately.","confirm":"Delete Key","cancel":"Cancel"},"toast":{"loadError":"Failed to load API keys","loadErrorDescription":"Please try again.","disabled":"API key disabled","disabledDescription":"\\"{{name}}\\" has been disabled.","disableError":"Failed to disable API key","enabled":"API key enabled","enabledDescription":"\\"{{name}}\\" has been re-enabled.","enableError":"Failed to enable API key","deleted":"API key deleted","deletedDescription":"\\"{{name}}\\" has been permanently deleted.","deleteError":"Failed to delete API key","createError":"Failed to create API key","updateError":"Failed to update API key","copyError":"Failed to copy API key","updated":"API key updated","updatedDescription":"\\"{{name}}\\" has been saved."},"createDialog":{"title":"Create API Key","titleReveal":"API Key Created","namePlaceholder":"e.g. SIEM Integration","descriptionPlaceholder":"What is this key used for?","cancelButton":"Cancel","createButton":"Create Key","creatingButton":"Creating...","warningMessage":"Copy this key now - you won't be able to see it again. Treat it like a password: it grants access to your workspace data via the API.","yourApiKey":"Your API key","doneButton":"Done","copyAria":"Copy API key"},"editDialog":{"title":"Edit API Key","cancelButton":"Cancel","saveButton":"Save","savingButton":"Saving..."},"permissions":{"title":"Permissions","selectAll":"Select all permissions","appAccess":"App access","
4selectedApps":"Selected apps","allApps":"All current and future apps","selectApps":"Select at least one app","deprecated":"Deprecated","loading":"Loading permissions...","loadError":"Failed to load permissions. Try again.","loadMore":"Load more apps","loadingMore":"Loading more apps...","learnMore":"Learn more","searchApps":"Search apps...","noAppsMatchSearch":"No loaded apps match your search."},"formFields":{"name":"Name","description":"Description","descriptionOptional":"(optional)"}}},"customIntegrations":{"title":"Integrations","addButton":"Add integration","endpointCount_one":"{{count}} endpoint","endpointCount_other":"{{count}} endpoints","actions":{"edit":"Edit","delete":"Delete","cancel":"Cancel","back":"Back","continue":"Continue","save":"Save","createIntegration":"Create integration","applyChanges":"Apply changes","clearAll":"Clear all","addHeader":"Add header","editEndpoints":"Edit endpoints","actionsFor":"Actions for {{name}}"},"emptyState":{"title":"No integrations yet","description":"Custom integrations expose an external API to your apps, generated from its OpenAPI specification."},"deleteConfirm":{"title":"Delete integration","description":"Deleting \\"{{name}}\\" can't be undone, and apps using this integration will stop working."},"dialog":{"createTitle":"Add custom integration","editTitle":"Edit integration","steps":{"source":"Add source","endpoints":"Select endpoint","config":"Configure"}},"source":{"fromUrl":"From URL","pasteJson":"Paste JSON","urlLabel":"OpenAPI specification URL","urlDescription":"Enter the URL of your OpenAPI/Swagger specification (JSON or YAML)","jsonLabel":"OpenAPI specification JSON","jsonDescription":"Paste your OpenAPI/Swagger specification in JSON format"},"config":{"slugLabel":"Slug","nameLabel":"Name","namePlaceholder":"My API Integration","descriptionLabel":"Description","descriptionPlaceholder":"Describe what this integration does...","baseUrlLabel":"Base URL"},"headers":{"title":"Custom headers","description":"Add headers that will be sent with every request (e.g. API keys)","loadErrorTitle":"Couldn't load authentication headers","loadErrorHint":"Saving is disabled so nothing is overwritten by accident. Close and reopen this dialog to retry.","loadFailed":"Failed to load authentication headers","nameLabel":"Header name","valueLabel":"Header value","sensitivePlaceholder":"(sensitive - delete to change)","showValue":"Show header value","hideValue":"Hide header value","removeHeader":"Remove header","missingNamesAndValues":"Some headers are missing names or values","missingValues":"Please provide a value for all headers with a name","missingNames":"Please provide a name for all headers with a value"},"endpoints":{"selectHint":"Select endpoints to expose (max {{max}})","selectedCount":"{{selected}} / {{max}} selected","searchLabel":"Search endpoints","searchPlaceholder":"Search endpoints...","listLabel":"Endpoints","noResults":"No endpoints match your search","modalTitle":"Edit endpoints"},"slug":{"validationError":"Error validating slug"},"toast":{"urlRequired":"URL required","urlRequiredDescription":"Please enter an OpenAPI specification URL","jsonRequired":"JSON required","jsonRequiredDescription":"Please enter OpenAPI specification JSON","invalidJson":"Invalid JSON","invalidJsonDescription":"The provided JSON is not valid","specParsed":"Spec parsed","specParsedDescription_one":"Found {{count}} endpoint","specParsedDescription_other":"Found {{count}} endpoints","parseError":"Error parsing specification","parseErrorDescription":"Failed to parse OpenAPI spec","created":"Integration created","updated":"Integration updated","savedDescription":"{{name}} has been saved","saveError":"Error saving integration","saveErrorDescription":"Failed to save integration","loadError":"Error loading integrations","loadErrorDescription":"Failed to load custom integrations","deleted":"Integration deleted","deletedDescription":"{{name}} has been deleted","deleteError":"Error deleting integration","deleteErrorDescription":"Failed to delete integration","endpointsLoadError":"Error loading endpoints","endpointsLoadErrorDescription":"Failed to load available endpoints","maxEndpoints":"Maximum endpoints reached","maxEndpointsDescription":"You can select up to {{max}} endpoints","noEndpointsSelected":"No endpoints selected","noEndpointsSelectedDescription":"Please select at least one endpoint"},"validation":{"title":"Validation error","requiredFields":"Please fill in all required fields and select at least one endpoint","invali
4dSlug":"Invalid slug","invalidSlugDescription":"Please fix the slug before saving","cannotSave":"Cannot save","headersNotLoaded":"Authentication headers failed to load. Please try closing and reopening the dialog."}},"authSecurity":{"title":"Authentication","description":"Configure authentication and security settings for your workspace.","sso":{"title":"Single Sign-on Configuration","configureTooltip":"Configure SSO for your workspace","description":"Enable SSO to streamline authentication for your workspace members.","settingUp":"Setting up...","setUp":"Set Up","planTooltip":"SSO is available on {{plan}} plans and above","setUpConfiguration":"Set up SSO Configuration","enforcedTooltip":"This SSO is enforced for all apps in the workspace, meaning they automatically use it for authentication. To update enforcement settings, go to Apps Configuration.","enforcedBadge":"Enforced for apps","setUpAction":"Set up","configure":"Configure","selectProvider":"Select SSO Provider","cancelSetup":"Cancel Setup","dismiss":"Dismiss","saving":"Saving...","enableSSO":"Enable SSO","saveSSOSettings":"Save SSO Settings","limitedAccessTitle":"Limited Access","limitedAccessDesc":"Only workspace admins can configure SSO settings.","callbackUrlsHint":"Register this callback URL with your identity provider as an allowed redirect URI. It is used for Base44 workspace login.","callbackUrlsWorkspaceLabel":"Workspace login callback URL","callbackUrlsWorkspaceAppHint":"If your apps will use workspace SSO, add this callback URL as well.","callbackUrlsWorkspaceAppLabel":"Workspace app login callback URL","callbackUrlsCopyAriaLabel":"Copy {{url}}","learnMoreSetup":"Learn more about workspace SSO setup","toast":{"error":"Error","failedToLoadSettings":"Failed to load SSO settings","failedToLoadAppSettings":"Failed to load app settings","ssoEnabled":"SSO Enabled","ssoEnabledDesc":"Single Sign-On has been enabled for your workspace","ssoDisabled":"SSO Disabled","ssoDisabledDesc":"Single Sign-On has been disabled","failedToUpdateStatus":"Failed to update SSO status","success":"Success","settingsUpdated":"SSO settings updated successfully","failedToUpdate":"Failed to update SSO settings"},"fields":{"client_id":"Client ID","client_secret":"Client Secret","scope":"Scope","discovery_url":"Discovery URL","tenant_id":"Tenant ID","okta_domain":"Okta Domain","auth_endpoint":"Auth Endpoint","token_endpoint":"Token Endpoint","userinfo_endpoint":"Userinfo Endpoint","jwks_uri":"JWKS URI","name":"Provider Name","pkce_enabled":"Use PKCE (recommended)","include_offline_access":"Request offline access"},"descriptions":{"pkce_enabled":"Adds the standard OAuth 2.1 PKCE challenge to login.","include_offline_access":"Adds access_type=offline to the authorization request."},"discoveryUrlAuto":"Auto","discoveryUrlModified":"Modified","resetDiscoveryUrlToAuto":"Reset to auto","placeholders":{"client_id":"Enter client ID","client_secret":"Enter client secret","scope":"Enter scope","discovery_url":"Enter discovery URL","tenant_id":"Microsoft Entra tenant ID or 'common' for multi-tenant","okta_domain":"your-company","auth_endpoint":"Enter auth endpoint","token_endpoint":"Enter token endpoint","userinfo_endpoint":"Enter userinfo endpoint","jwks_uri":"Enter JWKS URI","name":"Enter provider name"},"tooltips":{"clientId":"The OAuth client ID provided by your identity provider","clientSecret":"The OAuth client secret provided by your identity provider (keep this confidential)","scopeGeneral":"OAuth scopes to request (openid, email, profile are commonly used)","scopeGithub":"OAuth scopes to request (user:email for GitHub)","discoveryUrlGoogle":"OIDC discovery endpoint (pre-configured for Google)","discoveryUrlMicrosoft":"OIDC discovery endpoint automatically generated from your tenant ID","discoveryUrlOkta":"Auto-generated from the Okta Domain field. If the Okta Domain includes an authorization server path such as /oauth2/default, that path is included in the OIDC discovery endpoint.","discoveryUrlAdvanced":"OIDC discovery endpoint URL (if supported by your provider)","tenantId":"Microsoft Entra tenant ID. Use a specific GUID for single-tenant, or 'common' to allow any Microsoft account (personal + work/school), or 'organizations' for work/school accounts only","oktaDomain":"Enter your Okta domain or custom URL domain, such as your-company.okta.com or login.company.com. If your Okta org uses API Access Management/custom authorization servers, enter the issuer URL including the authorization server path, such as https://login.company.com/oauth2/default.","authEndpointGithub":"GitHub OAuth authorization endpoint (pre-configured)","authEndpointGeneral":"OAuth authorization endpoint URL","tokenEndpointGithub":"GitHub OAuth token endpoint (pre-configured)","tokenEndpointGeneral":"OAuth token endpoint URL","userinfoEndpointGithub":"GitHub API user endpoint (pre-configured)","userinfoEndpointGeneral":"OAuth userinfo endpoint URL","jwksUri":"JSON Web Key Set URI for token verification","providerName":"Custom name for your SSO provider","pkce_enabled":"Sends code_challenge and code_verifier (S256). Disable only for providers that reject unknown OAuth parameters, such as ClassLink or older Shibboleth/ADFS deployments.","include_offline_access":"Sends access_type=offline so the provider can return a refresh token. Has no effect for providers using response_mode=form_post (such as Apple). Disable only for providers that reject this parameter, such as ClassLink or older Shibboleth/ADFS deployments."},"providerFallback":"{{name}} SSO","providers":{"advanced":"Advanced / Manual Configuration"}},"externalCollaborators":{"title":"External Collaborators","description":"Restrict guest invites to workspace admins. When enabled, only owners and admins can invite people from outside the workspace as app collaborators.","toast":{"loadErrorTitle":"Error","loadErrorDesc":"Failed to load external 
4collaborator settings.","successTitle":"Settings updated","enabledDesc":"Only workspace admins can now invite external collaborators.","disabledDesc":"Workspace editors can now invite external collaborators.","errorTitle":"Error","errorDesc":"Failed to update external collaborator settings."}},"scim":{"title":"SCIM Provisioning","subtitle":"Automatically sync users from your identity provider.","statusConnected":"Connected","statusNotConnected":"Not connected","lastActivity":"Last activity: {{time}}","baseUrlLabel":"Base URL","baseUrlCopyAriaLabel":"Copy SCIM base URL","microsoftEntraHint":"If you use Microsoft Entra, append <code>?aadOptscim062020</code> to the end of the URL.","tokenHint":"Use a Workspace API Key as the Bearer token.","manageApiKeysLink":"Manage API Keys","toast":{"copyFailedTitle":"Copy failed","copyFailedDescription":"Could not copy the SCIM base URL to your clipboard."}},"domainVerification":{"title":"Verified Domains","label":"Workspace domain","placeholder":"Add your domain","hint":"The domain linked to your workspace","verified":"Verified","domainVerifiedSuccess":"Domain verified successfully!","enterDomainFirst":"Please enter a domain first","domainSaved":"Domain saved. Add the DNS record to verify ownership.","configFailed":"Failed to configure domain verification","addDnsRecords":"Add DNS records for {{domain}}","dnsInstructions":"Log into your domain provider, go to the DNS settings, and add this TXT record.","type":"Type","hostName":"Host / Name","value":"Value","dnsCheckNote":"DNS verification can take a few minutes. Once everything is updated, we'll automatically verify your domain.","checkingDns":"Checking your DNS records...","copyLabel":"Copy {{label}}","domainRemoved":"Removed verified domain {{domain}}","removeFailed":"Failed to remove {{domain}}","removeDomainLabel":"Remove verified domain {{domain}}","description":"Domains verified for SSO discovery. Users with these email domains will see SSO on the login page.","addDomainPlaceholder":"Add domain (e.g. company.org)","verify":"Verify","remove":"Remove","invalidDomainFormat":"Enter a valid domain (e.g. company.com)","verificationCanceled":"Domain verification canceled","cancelFailed":"Failed to cancel domain verification","pollingPaused":"Auto-check paused","recheckNow":"Recheck now","canceling":"Canceling...","cancel":"Cancel","abandonDialogTitle":"Cancel pending verification?","abandonDialogDescription":"{{domain}} is still being verified. Adding a new domain will cancel that verification — you'll need to restart it from scratch.","abandonDialogConfirm":"Cancel and continue","abandonDialogKeep":"Keep verifying"},"jitRole":{"title":"Default role for SSO auto-provisioned users","description":"Applies only to users added through JIT provisioning when no group, invite, or SCIM role sets a user's role.","viewer":"Viewer","editor":"Editor","noAccess":"No access","savedSuccess":"JIT default role updated","saveFailed":"Failed to update JIT default role"},"workspaceCreationPolicy":{"title":"Restrict workspace creation","description":"People on your verified domains can't create their own workspaces. They join Base44 only through SSO, SCIM, or an invitation from this workspace.","toggleLabel":"Restrict workspace creation","verifyDomainFirst":"Verify an email domain to turn this on.","enabledSuccess":"Workspace creation is now restricted for your verified domains","disabledSuccess":"Workspace creation is no longer restricted","verifiedDomainRequired":"Verify an email domain before restricting workspace creation.","saveFailed":"Couldn't update the workspace creation policy. Try again."},"accountKeyPolicy":{"blockedSuccess":"Personal account API keys are now blocked for this workspace","allowedSuccess":"Personal account API keys are now allowed for this workspace","saveFailed":"Failed to update the account API key policy","title":"Block account API keys","description":"Members' personal account API keys cannot access this workspace's apps or data. Recommended for workspaces that enforce SSO. Workspace API keys (admin-managed) are not affected.","usageHeadline_one":"{{count}} request used an account API key here in the last 30 days","usageHeadline_other":"{{count}} requests used account API keys here in the last 30 days","usageBody_one":"{{count}} member is actively using their key against this workspace. Review the list in Audit Logs.","usageBody_other":"{{count}} members are actively using their keys against this workspace. Review the list in Audit Logs.","noUsage":"No account API keys were used against this workspace in the last 30 days."},"ssoEnforcement":{"title":"Require SSO for all workspace members","description":"Members must sign in through this workspace's SSO to access it.","statusActive":"Active","statusInactive":"Not active yet","statusInactiveTooltip":"Enforcement is on, but it won't apply to members until a workspace admin completes a successful SSO sign-in.","enabledSuccess":"SSO is now required for this workspace","disabledSuccess":"SSO is no longer required for this workspace","saveFailed":"Failed to update SSO enforcement","exemptGuests":{"label":"Exempt guests from SSO","description":"Guest members can still sign in with a password or Google.","savedSuccess":"Guest exemption updated","saveFailed":"Failed to update guest exemption"}},"personalTokenPolicy":{"title":"Enable personal access tokens","description":"Decide whether members can use personal access tokens in this workspace, and what those access tokens are allowed to do.","tooltip":"Off means no access token can reach this workspace. On lets members create their own, within the limits you set.","columnLimit":"Limit","columnAllowed":"Allowed","permission":{"title":"Permission","description":"What access tokens can do","fullAccess":"Full access","readOnly":"Read-only"},"access":{"title":"Access","description":"How much of the workspace an access token can reach","allApps":"All apps and Superagents","singleApp":"One app or Superagent"},"footnote":{"compliant_one":"{{count}} member access token in this workspace meets this policy","compliant_other":"{{count}} member access tokens in this workspace meet this policy","nonCompl
4iant_one":"{{count}} active access token does not meet this policy","nonCompliant_other":"{{count}} active access tokens do not meet this policy","viewInSecrets":"View in Secrets","viewTokensInWorkspace":"View access tokens in this workspace"},"confirmLimit":{"permissionTitle":"Limit access tokens to read-only?","accessTitle":"Limit each access token to one app or Superagent?","description_one":"{{count}} of {{total}} existing access tokens doesn't meet this limit but will keep working. It applies only to access tokens created or changed from now on.","description_other":"{{count}} of {{total}} existing access tokens don't meet this limit but will keep working. It applies only to access tokens created or changed from now on.","viewTokens":"View access tokens","confirm":"Apply","cancel":"Cancel"},"confirmDisable":{"title":"Turn off personal access tokens?","description_one":"{{count}} active access token will stop working immediately.","description_other":"{{count}} active access tokens will stop working immediately.","confirm":"Turn off","cancel":"Cancel"},"saved":"Personal access token settings updated","saveFailed":"Couldn't save the personal access token settings. Try again."}},"whiteLabel":{"loading":"Loading white-label settings…","unavailable":"White-label isn't enabled for this workspace.","loadFailed":"Couldn't load white-label settings. Refresh to try again.","saved":"White-label settings saved","saveFailed":"Couldn't save white-label settings. Try again.","customSystemPrompt":{"title":"Custom system prompt","description":"Replace the built-in prompt with your own and present the builder under your brand, for every app in this workspace."},"brand":{"title":"Brand","description":"Names your platform and its agent. These are identifiers — what your users see in chat comes from the agent prompt below.","nameLabel":"Brand name","namePlaceholder":"e.g. Northlight Studio","nameHelper":"Your users see this in chat instead of Base44, once you’ve saved an agent prompt below. Up to 48 characters.","nameRequiredError":"Add a brand name, or turn off the custom system prompt.","agentNameLabel":"Agent name","agentNamePlaceholder":"e.g. Scout","agentNameHelper":"What you call your agent. Refer to it in your agent prompt for the agent to use it. Leave it empty to use your brand name.","agentNameOptional":"(optional)","save":"Save","cancel":"Cancel"},"designSystem":{"title":"Default design system","description":"Adds its design tokens and rules to the agent prompt. Choose which one is the default on the <designSystemLink>Design system</designSystemLink> page."},"agentPrompt":{"title":"Agent prompt","description":"Your own system prompt for the agent. Save one and it replaces the built-in prompt for every app in this workspace.","label":"Agent prompt","placeholder":"You are Scout, Northlight Studio's app builder. You build Vue 3 apps with Pinia and…","helper":"The agent works from this, plus a short tool-and-safety contract you can't change. Leave it empty to keep the built-in prompt.","save":"Save","cancel":"Cancel"}},"githubOrganizationRole":{"title":"Who can connect organizations","description":"Anyone in the workspace can use an organization that is already connected. This only controls who can add a new one.","editor":"Owners, Admins and Editors","admin":"Owners and Admins only","saved":"Organization permissions updated","saveError":"Couldn't update organization permissions. Try again.","loadError":"Couldn't load organization permissions.","loading":"Loading organization permissions…","editorDescription":"Anyone who can build can add a GitHub organization.","adminDescription":"Editors can still use organizations already connected."},"webhooks":{"title":"Webhooks","description":"Receive events from external services to trigger workflows, or send workspace events to your own systems.","tabs":{"incoming":"Incoming","outgoing":"Outgoing"}},"outboundWebhooks":{"title":"Outgoing webhooks","description":"Send selected workspace events to external URLs when they happen.","addButton":"Create webhook","limitReached":"You've reached the limit of {{max}} endpoints. Delete one to add another.","table":{"title":"Endpoints","eventCount_one":"{{count}} event","eventCount_other":"{{count}} events","lastDelivery":"Last delivery {{date}}
4","never":"No deliveries yet","consecutiveFailures_one":"{{count}} failure in a row","consecutiveFailures_other":"{{count}} failures in a row"},"empty":{"title":"No webhooks yet","description":"Create a webhook to start sending events from this workspace."},"loadFailed":{"title":"Couldn't load endpoints","description":"The list didn't load. Try again.","retry":"Try again"},"state":{"pending":"Pending","active":"Active","paused":"Paused","auto_paused":"Auto-paused"},"health":{"degraded":"Degraded","failing":"Failing"},"actions":{"test":"Send test event","activate":"Activate","edit":"Edit endpoint","pause":"Pause deliveries","resume":"Resume deliveries","delete":"Delete endpoint","menuFor":"Actions for {{url}}","menu":"Endpoint actions"},"dialog":{"addTitle":"Create webhook","editTitle":"Edit endpoint","cancel":"Cancel","add":"Create webhook","save":"Save changes","urlLabel":"Endpoint URL","urlError":{"invalid":"Enter a full URL, including https://","insecure":"Use an HTTPS URL. Events are only sent over HTTPS.","credentials":"Remove the username and password from the URL. Requests are signed instead, so no credentials are needed.","tooLong":"This URL is too long."},"eventsLabel":"Events to send","searchEvents":"Search events","clearSearch":"Clear event search","noMatchingEvents":"No events match your search. Try another term.","eventsUnavailable":"Couldn't load the event list.","eventsLoading":"Loading events…","eventsEmpty":"No events are available.","retryEvents":"Try again","descriptionLabel":"Description","descriptionPlaceholder":"What this endpoint is for","urlChangeWarning":"Saving this URL stops deliveries. Activate the new URL to resume them.","retiredEvent":"{{name}} (retired)"},"created":{"title":"Endpoint registered","titleActivate":"Activate endpoint","pending":"{{url}} stays Pending until you activate it. Webhook setup docs are coming soon.","verifyLabel":"Verify requests against this public key","publicNotice":"Public — safe to share. Your receiver uses it to confirm a request really came from Base44.","keyPending":"The signing key is being created. Check Public signing keys in a moment.","urlLabel":"Or fetch the current keys from this URL","activate":"Activate now","skip":"Skip"},"events":{"appCreated":"App created","appPublished":"App published","appUnpublished":"App taken offline","appDeleted":"App moved to trash","appRestored":"App restored from trash"},"keys":{"title":"Public signing keys","view":"See public keys","description":"Use these keys to verify requests from Base44. Signatures are sent in the webhook-signature header using the {{scheme}} scheme.","empty":"A signing key is created with your first endpoint.","noCurrentKey":"There's no current signing key. Rotate the key to create one.","loadFailed":"Couldn't load the signing keys.","retry":"Try again","keyMeta":"{{kid}} · {{algorithm}}","copyKey":"Copy public key","copyUrl":"Copy key URL","copied":"Copied","urlLabel":"Your receiver can fetch the current keys from this URL","current":"Current","retiring":"Stops signing {{date}}","rotate":"Rotate key","rotationNotice":"Both keys sign every delivery until {{date}}. Add the new key to your receiver before then, then finish the rotation.","finishRotation":"Finish rotation","revoke":"Revoke","cancel":"Cancel","rotateConfirm":{"title":"Rotate the signing key?","description":"Base44 creates a new key and keeps signing with the current one for 24 hours. If your receiver stores the key, add the new one before then.","confirm":"Rotate key"},"finishConfirm":{"title":"Finish the rotation?","description":"Base44 stops signing with {{kid}} now. Receivers that don't have the new key yet will reject deliveries.","confirm":"Finish rotation"},"revokeConfirm":{"title":"Revoke {{kid}}?","description":"Base44 stops signing with this key immediately. Receivers that only have this key will reject deliveries until you give them the new one. For a routine change, rotate the key instead.","confirm":"Revoke key"},"toast":{"rotate":"New signing key created","finish":"Rotation finished","revoke":"Key revoked"},"errors":{"rotation_in_progress":"A rotation is already in progress. Finish it before starting another.","no_rotation_in_progress":"There's no rotation to finish.","already_revoked":"That key is already revoked.","replacement_mint_failed":"The key was revoked, but its replacement couldn't be created. Revoke it again to retry."}},"toast":{"created":"Endpoint added","updated":"Endpoint updated","activated":"Endpoint activated","activationFailed":"Activation didn't complete","testSent":"Test event sent","testFailed":"Test event failed","paused":"Deliveries paused","resumed":"Deliveries resumed","deleted":"Endpoint deleted"},"errors":{"limit_exceeded":"This workspace already has the maximum number of endpoints. Delete one to add another.","not_found":"That endpoint no longer exists. Refresh the list.","rate_limited":"Too many requests. Wait a minute and try again.","permission_denied":"You need to be a workspace admin to change endpoints.","generic":"That didn't work. Try again."},"activation":{"failure":{"timeout":"Your endpoint didn't answer in time.","transport":"We couldn't reach your endpoint. Check that the host is public and resolves.","serverError":"Your endpoint answered with an error ({{status}}).","clientError":"Your endpoint returned {{status}}. Check its handler, then try again.","challengeMissing":"Your endpoint returned {{status}} but didn't echo data.challenge. Return it as plain text or in a JSON challenge field, then try again.","redirect":"Your endpoint redirected the request, and redirects aren't followed. Register the URL that answers directly.","ssrfRejected":"That address can't be used as an endpoint. Use a public HTTPS URL.","abortedByReceiver":"Your endpoint asked us to stop sending.","internal":"Something went wrong on our side. Try again.","unknown":"The test didn't complete. Try again."}},"deleteConfirm":{"title":"Delete endpoint","description":"{{url}} stops receiving events immediately. Registering it again means activating it again.","confirm":"Delete endpoint","cancel":"Cancel"}}}`),referralCta:{earnBonusCredits:`Earn bonus credits`},sidebar:{apps:`Apps`,superagent:`Agent`,superagents:`Agents`,superagentsDisabledTooltip:`Your workspace admin disabled Agents for this workspace.`,superagentDisabledToastTitle:`Agents disabled`,newAgent:`New Agent`,emptyAgents:`Create your first agent and see your conversations here.`,allAgents:`All Agents`,recentSuperagents:`Recent Superagents`,search:`Search`,clearSearch:`Clear search`,mainMenu:`Main menu`,settings:`Settings`,payments:`Payments`,inviteMembers:`Invite members`,allWorkspaces:`My workspaces`,searchWorkspaces:`Search workspaces`,noWorkspacesFound:`No workspaces found`,org:`Org`,createNewWorkspace:`Create new workspace`,recents:`Recents`,renameFailed:`Could not update the name. Try again.`,moreActionsFor:`More actions for {{name}}`,renameSuperagentAria:`Rename {{name}}`,openAgent:`Open {{name}}`,favoriteAgentAria:`Star {{name}}`,unfavoriteAgentAria:`Unstar {{name}}`,favorites:`Favorites`,favoriteApps:`Favorite apps`,noFavoritesYet:`No favorites yet`,noFavoriteAppsYet:`No favorite apps yet.`,noFavoriteAgentsYet:`No favorite agents yet.`,addAppsForQuickAccess:`Add your apps for quick access`,addAgentsForQuickAccess:`Add your agents for quick access`,favoritesApps:`Favorite apps`,view_all:`View all`,buildWithBase:`Build with Base`,newProject:`New`,switchProduct:`Switch product`,switcherApps:`Turn ideas into live apps`,switcherCode:`Work in code with your team`,switcherStudio:`Generate images and video`,switcherAgent:`Hand off your daily tasks`,agentLockup:`Superagent`,codeLockup:`Code`,baseCodeConnectRepo:`Connect repo`,baseCodeSearchRepos:`Search repositories`,baseCodeAddRepo:`Add repository`,baseCodeRepoUpdated:`Updated {{when}}`,baseCodeSwitchRepo:`Switch repository`,baseCodeBranches:`Branches`,baseCodeBranchWorking:`Working`,baseCodeBranchMerging:`Merging`,baseCodeBranchReady:`Ready to review`,baseCodeActivity:`Activity`,earnFreeCredits:`Earn free credits`,showMoreCredits:`Show more`,showLessCredits:`Show less`,workspaceGroup:`Workspace`,projects:`Apps`,toggleRecentProjects:`Show or hide recent apps`,toggleCommunityMenu:`Show or hide community pages`,openSidebar:`Open sidebar`,closeSidebar:`Close sidebar`,mainNavigation:`Main navigation`,workspaces:`Workspaces`,addNewWorkspace:`Add new workspace`,referral:`Referral`,feedback:`Feedback`,whatsNewNotifications:`What's new & notifications`,expandGroup:`Expand`,collapseGroup:`Collapse`,community:`Community`,partners:`Partners`,unreadNotifications:`Unread notifications`,searchPlaceholder:`Search...`},giftCards:{pageTitle:`Gift cards`,pageSubtitle:`Give the gift of building. Send a gift card to a friend.`,tabBuy:`Buy a gift card`,tabPurchased:`Purchase history`,successTitle:`Gift card purchased 
4successfully!`,successDescription:`The recipient will receive an email with their gift card code.`,successDescriptionPdf:`Check your email for a printable gift card to give in person.`,dismissSuccess:`Dismiss success message`,amount:`Choose an amount`,customAmountPlaceholder:`{{symbol}} Custom amount`,customAmountError:`Amount must be between {{min}} and {{max}}`,deliveryMethodTitle:`How would you like to send it?`,deliveryEmail:`Email to recipient (immediately)`,deliveryPdf:`Email to you (printable)`,recipientTitle:`Who is it for?`,recipientName:`Name`,recipientNamePlaceholder:`Enter recipient name`,recipientEmail:`Email`,recipientEmailPlaceholder:`Enter recipient email`,messageLabel:`Gift card message (optional)`,messagePlaceholder:`Add a personal message (optional)`,suggestMessage:`Suggest a message`,messageCharCount:`{{count}}/300 characters`,senderTitle:`Who is it from?`,senderNamePlaceholder:`Enter sender name`,submitButton:`Continue to checkout`,submitting:`Processing...`,errorGeneric:`Something went wrong`,historyEmpty:`No gift cards yet. Buy one for a friend!`,historyCodeLabel:`Gift card code`,historyCopy:`Copy`,historyCopied:`Copied`,statusSent:`Sent`,statusRedeemed:`Redeemed`,statusExpired:`Expired`,statusProcessing:`Processing`,statusPending:`Pending`,statusRevoked:`Revoked`,historyActions:`Actions`,designTitle:`Pick a design`,designClassic:`Classic`,designSunrise:`Sunrise`,designOcean:`Ocean`,cardLabel:`Gift Card`,cardCreditsLabel:`message credits`,historyError:`Failed to load gift cards. Please try again.`,historyDateIssued:`Date issued`,historyRecipient:`Recipient`,historyAmount:`Amount`,historyStatus:`Status`,historyCode:`Code`,historySenderDetails:`Sender details`,historySentToYou:`Sent to you`,historyViewCode:`View code`,historyHideCode:`Hide code`,historyDownloadPdf:`Download PDF`,historyResend:`Resend`,historyResendSuccess:`Gift card email resent successfully!`,historyResendError:`Failed to resend email. Please try again.`,historyDownloadError:`Failed to download. Please try again.`,emailInvalid:`Please enter a valid email address`,redeemTitle:`You received a gift card!`,redeemDescription:`Once you redeem, credits will be applied to your workspace.`,redeemSelectWorkspace:`Select a workspace`,redeemBackToWorkspace:`Back to Workspace`,redeemCheckCreditUsage:`Check credit usage`,redeemErrorDescription:`This code has already been used and cannot be redeemed again. If you are not sure what happened, you can check your credits or contact support.`,redeemDefaultWorkspace:`this`,error:`Error`,redeemSuccess:`Gift card redeemed!`,redeemSuccessDescription:`{{credits}} credits added to {{workspace}}.`,redeemButton:`Redeem gift card`,redeemNotNow:`Not now`,redeemDocsLink:`Learn how gift card credits work in <docsLink>our documentation</docsLink>`,redeemCouponDescription:`Redeem it to get {{amount}} off your subscription.`,redeemCouponAppliedTitle:`Gift card applied!`,redeemCouponReadyTitle:`Gift card ready to use!`,redeemCouponNoWorkspace:`No workspace selected`,coupon:{title:`Redeem a coupon or gift card`,description:`Enter your code to add credits to your balance.`,placeholder:`Enter your code`,apply:`Apply`,success:`Coupon applied successfully!`,invalidCode:`The code is invalid. Please try again.`,notFound:`Coupon code not found. Please check and try again.`,giftCardNotFound:`Gift card not found. Check the code and try again.`,redeemFailed:`Failed to redeem gift card. Please try again.`},errors:{invalidRecipientEmail:`Please enter a valid email address`,recipientEmailRequired:`Recipient email is required`,checkoutFailed:`Failed to initiate checkout. Please try again.`,confirmPurchaseFailed:`Failed to confirm purchase. Please try again.`,alreadyRedeemed:`This gift card has already been redeemed`,notAvailable:`This gift card is not available for redemption`,expired:`This gift card has expired`,notWorkspaceMember:`You are not a member of the selected workspace`,networkError:`Network error. Please check your internet connection and try again.`,rateLimitExceeded:`Too many attempts. Please try again later.`,permissionDenied:`Only workspace owners can redeem gift cards. Ask a workspace owner to apply this code.`,invali
4dPlanPrice:`This plan is not available for gift card checkout. Please select a different plan.`}},common:{back:`Back`,breadcrumb:`Breadcrumb`,close:`Close`},loading:`Loading...`,userMismatch:{message:`Signed in as <strong>{{email}}</strong> — doesn't match the expected account.`,switchAccount:`Switch account`,dismiss:`Dismiss banner`},institutionDeletion:`Institution deletion`},Q={en:{label:`English`,nativeLabel:`English`,locale:`en-US`},ja:{label:`Japanese`,nativeLabel:`日本語`,locale:`ja-JP`},de:{label:`German`,nativeLabel:`Deutsch`,locale:`de-DE`},es:{label:`Spanish`,nativeLabel:`Español`,locale:`es-ES`},fr:{label:`French`,nativeLabel:`Français`,locale:`fr-FR`},pt:{label:`Portuguese`,nativeLabel:`Português`,locale:`pt-BR`}};function $(e){let t=(e??``).split(`-`)[0];return t in Q?t:`en`}var Ye=`academic-domains.social-bonus.institution-deletion.homepage.editor.community-manager.navigation.dashboard-overview.dashboard-users.dashboard-data.dashboard-domains.dashboard-security.dashboard-seo.dashboard-automations.dashboard-automations-migration.dashboard-workflows.dashboard-emails.dashboard-connections.dashboard-payments.dashboard-agent-integrations.dashboard-infrastructure.dashboard-agents.dashboard-virality.dashboard-marketing.dashboard-marketing-agent.dashboard-marketing-dna.dashboard-settings.dashboard-logs.auth.account-settings.personal-access-tokens.app-access.app-listing.builder-profile.manage-apps.partner-hub.partners-chat.referrals.launchpad.community.events.plan-picker.plan-billing.partner-program.support.notifications.integrations-catalog.marketplace-terms.workspace-credits.credit-usage.workspace-admin.migration.announcements.announcements-admin.app-logo.message-diff.testing-agent.reviews-admin.blog-admin.app-limit.design-system-limit.consent.app-security-center.brand-editor.wix-builder-voucher.wix-store-builder.onboarding.workspace-hub.grow`.split(`.`),Xe={en:{auth:Ke,homepage:qe,navigation:Je}},Ze=!1,Qe=[`shareModal.role_admin`,`shareModal.role_user`],$e=(e,t)=>e===`integrations-catalog`&&t.startsWith(`catalog.`)||t.startsWith(`shareModal.role_`)&&!Qe.includes(t),et=`base44.com`,tt=Object.keys(Q),nt={name:`referrer`,lookup(){try{let e=document.referrer;if(!e)return;let t=new URL(e);if(t.hostname!==et&&!t.hostname.endsWith(`.${et}`))return;let n=t.pathname.split(`/`)[1];if(n&&tt.includes(n))return n}catch{}}},rt=new J;rt.addDetector(nt),L.use(rt).use(Ge).use(Te).init({resources:Xe,partialBundledLanguages:!0,fallbackLng:`en`,ns:[...Ye],interpolation:{escapeValue:!1},load:`languageOnly`,react:{useSuspense:!1},detection:{order:[`querystring`,`localStorage`,`referrer`,`navigator`],lookupQuerystring:`lng`,lookupLocalStorage:`i18nextLng`,caches:[`localStorage`]},debug:Ze,saveMissing:!0,missingKeyHandler:(e,t,n)=>{$e(t,n)||r(`i18n_missing_key`,{namespace:t,key:n,language:L.language})}});var it=t=>{let n=$(t);e(async()=>{let{setMomentLocale:e}=await import(`./momentLocaleSync-BTkvkz6G.js`);return{setMomentLocale:e}},__vite__mapDeps([0,1,2])).then(({setMomentLocale:e})=>e(n)).catch(()=>{})},at=e=>{X(`Accept-Language`,$(e))};it(L.language),at(L.language),L.on(`languageChanged`,e=>{it(e),at(e)});var ot=L;export{He as a,Se as c,X as i,L as l,ot as n,Ve as o,$ as r,we as s,Q as t};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.