Files
boc/quixzoom-landing-fixed/locale-data.js
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

107 lines
4.5 KiB
JavaScript

/* quiXzoom locale-data.js — Sprint 1 */
(function(){
window.QX_LOCALES = {
"SE": {
lang:"sv", currency:"EUR", symbol:"€", missionCurrency:"EUR",
exampleMission:{ title:"Fasadinventering", addr:"Storgatan 14, Stockholm", reward:"24", time:"3 foton · ~12 min" },
mapCenter:[18.0686, 59.3293], exampleCity:"Stockholm",
taxNote:"Sweden: Grundavdrag ~17,500 SEK/year"
},
"DE": {
lang:"de", currency:"EUR", symbol:"€", missionCurrency:"EUR",
exampleMission:{ title:"Fassadeninspektion", addr:"Maximilianstraße 12, München", reward:"24", time:"3 photos · ~12 min" },
mapCenter:[11.5820, 48.1351], exampleCity:"München",
taxNote:"Germany: Kleinunternehmer threshold €22,000/year"
},
"US": {
lang:"en", currency:"USD", symbol:"$", missionCurrency:"USD",
exampleMission:{ title:"Facade Survey", addr:"1234 Main St, Houston TX", reward:"28", time:"3 photos · ~12 min" },
mapCenter:[-95.3698, 29.7604], exampleCity:"Houston",
taxNote:"US: Self-employment tax applies above $400/year"
},
"GB": {
lang:"en", currency:"GBP", symbol:"£", missionCurrency:"GBP",
exampleMission:{ title:"Facade Inspection", addr:"42 High Street, London", reward:"22", time:"3 photos · ~12 min" },
mapCenter:[-0.1278, 51.5074], exampleCity:"London",
taxNote:"UK: Personal allowance £12,570/year"
},
"TH": {
lang:"en", currency:"THB", symbol:"฿", missionCurrency:"THB",
exampleMission:{ title:"Shop Sign Survey", addr:"123 Sukhumvit Rd, Bangkok", reward:"320", time:"3 photos · ~12 min" },
mapCenter:[100.5018, 13.7563], exampleCity:"Bangkok",
taxNote:"Thailand: Income tax applies above ฿150,000/year"
},
"NL": {
lang:"en", currency:"EUR", symbol:"€", missionCurrency:"EUR",
exampleMission:{ title:"Gevel Inspectie", addr:"Herengracht 52, Amsterdam", reward:"22", time:"3 fotos · ~12 min" },
mapCenter:[4.9041, 52.3676], exampleCity:"Amsterdam",
taxNote:"Netherlands: Zelfstandigenaftrek applies"
},
"FR": {
lang:"en", currency:"EUR", symbol:"€", missionCurrency:"EUR",
exampleMission:{ title:"Inspection de Façade", addr:"12 Rue de Rivoli, Paris", reward:"22", time:"3 photos · ~12 min" },
mapCenter:[2.3522, 48.8566], exampleCity:"Paris",
taxNote:"France: Auto-entrepreneur regime for freelance income"
},
"AE": {
lang:"en", currency:"AED", symbol:"AED", missionCurrency:"AED",
exampleMission:{ title:"Building Survey", addr:"Al Wasl Road, Jumeirah, Dubai", reward:"95", time:"3 photos · ~12 min" },
mapCenter:[55.2708, 25.2048], exampleCity:"Dubai",
taxNote:"UAE: No personal income tax"
}
};
/* Detect market from cookie > URL path > GeoIP hint (meta tag) > default EN */
function getMarket(){
var m = document.cookie.match(/(?:^|;)\s*qx_market=([A-Z]{2})/);
if(m) return m[1];
var p = location.pathname.match(/\/markets\/([a-z]{2})\//i);
if(p) return p[1].toUpperCase();
var meta = document.querySelector('meta[name="qx-market"]')
if(meta) return meta.content.toUpperCase();
return 'SE'; /* launch market default — update to null after global launch */
}
function setMarket(code){
document.cookie = 'qx_market='+code+';path=/;max-age=31536000';
applyMarket(code);
/* re-fire market change event for any listeners */
document.dispatchEvent(new CustomEvent('qx:market', {detail:{market:code}}));
}
function applyMarket(code){
var d = window.QX_LOCALES[code] || window.QX_LOCALES['SE'];
var m = d.exampleMission;
/* Floating card in hero */
var t = document.querySelector('.ps-card-title');
var a = document.querySelector('.ps-card-addr');
var r = document.querySelector('.ps-card-reward');
var mt = document.querySelector('.ps-card-meta');
if(t) t.textContent = m.title;
if(a) a.textContent = m.addr;
if(r) r.textContent = m.reward+' '+d.symbol;
if(mt) mt.textContent = m.time;
/* Market selector button label */
var btn = document.querySelector('.market-selector-current');
if(btn) btn.textContent = code;
/* Store for use by other scripts */
window.QX_CURRENT_MARKET = code;
window.QX_CURRENT_LOCALE = d;
}
/* Expose API */
window.QX_setMarket = setMarket;
window.QX_getMarket = getMarket;
/* Auto-apply on DOM ready */
if(document.readyState === 'loading'){
document.addEventListener('DOMContentLoaded', function(){ applyMarket(getMarket()); });
} else {
applyMarket(getMarket());
}
}());