[{"data":1,"prerenderedAt":444},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Farchitecture\u002Flocalization":180,"\u002Fdocs\u002Farchitecture\u002Flocalization-surround":439},[4,8,20,24,59,65,69,73,77,100,104,108,112,116,120,124,128,160,164,168,172,176],{"title":5,"path":6,"stem":7},"","\u002Fdocs","1.docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12,"icon":19},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F01.getting-started\u002F1.index",[13,15],{"title":14,"path":10,"stem":11},"Bosca",{"title":16,"path":17,"stem":18},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","1.docs\u002F01.getting-started\u002F2.quickstart",false,{"title":21,"path":22,"stem":23},"Kit","\u002Fdocs\u002Fkit","1.docs\u002F01.kit",{"title":25,"path":26,"stem":27,"children":28},"Content","\u002Fdocs\u002Fcontent","1.docs\u002F02.content\u002F1.index",[29,31,53],{"title":30,"path":26,"stem":27},"Content Strategy",{"title":32,"path":33,"stem":34,"children":35},"Metadata","\u002Fdocs\u002Fcontent\u002Fmetadata","1.docs\u002F02.content\u002F1.metadata\u002F1.index",[36,37,41,45,49],{"title":32,"path":33,"stem":34},{"title":38,"path":39,"stem":40},"Supplementary","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fsupplementary","1.docs\u002F02.content\u002F1.metadata\u002F2.supplementary",{"title":42,"path":43,"stem":44},"Documents","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fdocuments","1.docs\u002F02.content\u002F1.metadata\u002F3.documents",{"title":46,"path":47,"stem":48},"Guides","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fguides","1.docs\u002F02.content\u002F1.metadata\u002F4.guides",{"title":50,"path":51,"stem":52},"Bible","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fbible","1.docs\u002F02.content\u002F1.metadata\u002F5.bible",{"title":54,"path":55,"stem":56,"children":57},"Collections","\u002Fdocs\u002Fcontent\u002Fcollections","1.docs\u002F02.content\u002F2.collections\u002F1.index",[58],{"title":54,"path":55,"stem":56},{"title":60,"path":61,"stem":62,"children":63},"Workflows","\u002Fdocs\u002Fworkflows","1.docs\u002F03.workflows\u002F1.index",[64],{"title":60,"path":61,"stem":62},{"title":66,"path":67,"stem":68},"Search","\u002Fdocs\u002Fsearch","1.docs\u002F04.search",{"title":70,"path":71,"stem":72},"Profiles","\u002Fdocs\u002Fprofiles","1.docs\u002F05.profiles",{"title":74,"path":75,"stem":76},"Organizations","\u002Fdocs\u002Forganizations","1.docs\u002F06.organizations",{"title":78,"path":79,"stem":80,"children":81,"icon":99},"Engineering","\u002Fdocs\u002Fengineering","1.docs\u002F07.engineering\u002F1.index",[82,83,87,91,95],{"title":78,"path":79,"stem":80},{"title":84,"path":85,"stem":86},"Infrastructure","\u002Fdocs\u002Fengineering\u002Finfrastructure","1.docs\u002F07.engineering\u002F2.infrastructure",{"title":88,"path":89,"stem":90},"Backend Services","\u002Fdocs\u002Fengineering\u002Fservices","1.docs\u002F07.engineering\u002F3.services",{"title":92,"path":93,"stem":94},"Deployment","\u002Fdocs\u002Fengineering\u002Fdeployment","1.docs\u002F07.engineering\u002F4.deployment",{"title":96,"path":97,"stem":98},"Framework Modules","\u002Fdocs\u002Fengineering\u002Fframework","1.docs\u002F07.engineering\u002F5.framework","i-heroicons-wrench-screwdriver",{"title":101,"path":102,"stem":103},"Identity Management","\u002Fdocs\u002Fidentity","1.docs\u002F07.identity",{"title":105,"path":106,"stem":107},"Localization","\u002Fdocs\u002Flocalization","1.docs\u002F08.localization",{"title":109,"path":110,"stem":111},"Analytics","\u002Fdocs\u002Fanalytics","1.docs\u002F09.analytics",{"title":113,"path":114,"stem":115},"AI & Agents","\u002Fdocs\u002Fai","1.docs\u002F10.ai",{"title":117,"path":118,"stem":119},"Messaging & Email","\u002Fdocs\u002Fmessages","1.docs\u002F11.messages",{"title":121,"path":122,"stem":123},"Scheduler","\u002Fdocs\u002Fscheduler","1.docs\u002F12.scheduler",{"title":125,"path":126,"stem":127},"Backup & Restore","\u002Fdocs\u002Fbackup","1.docs\u002F13.backup",{"title":129,"path":130,"stem":131,"children":132},"Architecture","\u002Fdocs\u002Farchitecture","1.docs\u002F14.architecture\u002F1.index",[133,134,137,141,145,149,153,157],{"title":129,"path":130,"stem":131},{"title":92,"path":135,"stem":136},"\u002Fdocs\u002Farchitecture\u002Fdeployment","1.docs\u002F14.architecture\u002F2.deployment",{"title":138,"path":139,"stem":140},"Security","\u002Fdocs\u002Farchitecture\u002Fsecurity","1.docs\u002F14.architecture\u002F3.security",{"title":142,"path":143,"stem":144},"Telemetry","\u002Fdocs\u002Farchitecture\u002Ftelemetry","1.docs\u002F14.architecture\u002F4.telemetry",{"title":146,"path":147,"stem":148},"Administration","\u002Fdocs\u002Farchitecture\u002Fadministration","1.docs\u002F14.architecture\u002F5.administration",{"title":150,"path":151,"stem":152},"GraphQL Schema","\u002Fdocs\u002Farchitecture\u002Fgraphql","1.docs\u002F14.architecture\u002F6.graphql",{"title":154,"path":155,"stem":156},"Storage","\u002Fdocs\u002Farchitecture\u002Fstorage","1.docs\u002F14.architecture\u002F7.storage",{"title":105,"path":158,"stem":159},"\u002Fdocs\u002Farchitecture\u002Flocalization","1.docs\u002F14.architecture\u002F8.localization",{"title":161,"path":162,"stem":163},"Scripting","\u002Fdocs\u002Fscripting","1.docs\u002F15.scripting",{"title":165,"path":166,"stem":167},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F16.configuration",{"title":169,"path":170,"stem":171},"Forms","\u002Fdocs\u002Fforms","1.docs\u002F17.forms",{"title":173,"path":174,"stem":175},"Segmentation & Campaigns","\u002Fdocs\u002Fsegmentation","1.docs\u002F18.segmentation",{"title":177,"path":178,"stem":179},"Devices & Push","\u002Fdocs\u002Fdevices","1.docs\u002F19.devices",{"id":181,"title":105,"body":182,"description":434,"extension":435,"meta":436,"navigation":335,"path":158,"seo":437,"stem":159,"__hash__":438},"docs\u002F1.docs\u002F14.architecture\u002F8.localization.md",{"type":183,"value":184,"toc":426},"minimark",[185,194,199,205,210,244,248,255,301,305,311,404,408,411,422],[186,187,188,189,193],"p",{},"Bosca provides built-in support for managing localization through its ",[190,191,192],"code",{},"LanguagesService",". This service acts as the central registry for all supported languages in the system, ensuring consistent language handling across content, profiles, and interfaces.",[195,196,198],"h2",{"id":197},"language-registry","Language Registry",[186,200,201,202,204],{},"The ",[190,203,192],{}," allows administrators to define which languages are active and available for use.",[206,207,209],"h3",{"id":208},"key-features","Key Features",[211,212,213,221,238],"ul",{},[214,215,216,220],"li",{},[217,218,219],"strong",{},"Centralized Management:"," Add, edit, and remove supported languages globally.",[214,222,223,226,227,230,231,230,234,237],{},[217,224,225],{},"Standardized Tags:"," Uses standard language tags (e.g., ",[190,228,229],{},"en",", ",[190,232,233],{},"es",[190,235,236],{},"fr-CA",") to ensure compatibility with browsers and external tools.",[214,239,240,243],{},[217,241,242],{},"Metadata Support:"," Store additional language-specific attributes via JSON metadata.",[195,245,247],{"id":246},"data-model","Data Model",[186,249,250,251,254],{},"Each supported language is defined by the ",[190,252,253],{},"Language"," model:",[256,257,261],"pre",{"className":258,"code":259,"language":260,"meta":5,"style":5},"language-kotlin shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","data class Language(\n    val tag: String,      \u002F\u002F IETF BCP 47 language tag (e.g., \"en-US\")\n    val name: String,     \u002F\u002F English name (e.g., \"English (United States)\")\n    val localName: String,\u002F\u002F Native name (e.g., \"English (United States)\")\n    val attributes: JsonElement? \u002F\u002F Custom configuration\n)\n","kotlin",[190,262,263,271,277,283,289,295],{"__ignoreMap":5},[264,265,268],"span",{"class":266,"line":267},"line",1,[264,269,270],{},"data class Language(\n",[264,272,274],{"class":266,"line":273},2,[264,275,276],{},"    val tag: String,      \u002F\u002F IETF BCP 47 language tag (e.g., \"en-US\")\n",[264,278,280],{"class":266,"line":279},3,[264,281,282],{},"    val name: String,     \u002F\u002F English name (e.g., \"English (United States)\")\n",[264,284,286],{"class":266,"line":285},4,[264,287,288],{},"    val localName: String,\u002F\u002F Native name (e.g., \"English (United States)\")\n",[264,290,292],{"class":266,"line":291},5,[264,293,294],{},"    val attributes: JsonElement? \u002F\u002F Custom configuration\n",[264,296,298],{"class":266,"line":297},6,[264,299,300],{},")\n",[195,302,304],{"id":303},"service-api","Service API",[186,306,307,308,310],{},"Developers can interact with the language registry programmatically via the ",[190,309,192],{}," interface.",[256,312,314],{"className":258,"code":313,"language":260,"meta":5,"style":5},"interface LanguagesService : Service {\n    \u002F\u002F Retrieve all supported languages\n    suspend fun getAll(): List\u003CLanguage>\n\n    \u002F\u002F Get a specific language by tag\n    suspend fun get(tag: String): Language?\n\n    \u002F\u002F Register a new supported language\n    suspend fun add(language: Language)\n\n    \u002F\u002F Update an existing language definition\n    suspend fun edit(language: Language)\n\n    \u002F\u002F Remove a language support\n    suspend fun delete(tag: String)\n}\n",[190,315,316,321,326,331,337,342,347,352,358,364,369,375,381,386,392,398],{"__ignoreMap":5},[264,317,318],{"class":266,"line":267},[264,319,320],{},"interface LanguagesService : Service {\n",[264,322,323],{"class":266,"line":273},[264,324,325],{},"    \u002F\u002F Retrieve all supported languages\n",[264,327,328],{"class":266,"line":279},[264,329,330],{},"    suspend fun getAll(): List\u003CLanguage>\n",[264,332,333],{"class":266,"line":285},[264,334,336],{"emptyLinePlaceholder":335},true,"\n",[264,338,339],{"class":266,"line":291},[264,340,341],{},"    \u002F\u002F Get a specific language by tag\n",[264,343,344],{"class":266,"line":297},[264,345,346],{},"    suspend fun get(tag: String): Language?\n",[264,348,350],{"class":266,"line":349},7,[264,351,336],{"emptyLinePlaceholder":335},[264,353,355],{"class":266,"line":354},8,[264,356,357],{},"    \u002F\u002F Register a new supported language\n",[264,359,361],{"class":266,"line":360},9,[264,362,363],{},"    suspend fun add(language: Language)\n",[264,365,367],{"class":266,"line":366},10,[264,368,336],{"emptyLinePlaceholder":335},[264,370,372],{"class":266,"line":371},11,[264,373,374],{},"    \u002F\u002F Update an existing language definition\n",[264,376,378],{"class":266,"line":377},12,[264,379,380],{},"    suspend fun edit(language: Language)\n",[264,382,384],{"class":266,"line":383},13,[264,385,336],{"emptyLinePlaceholder":335},[264,387,389],{"class":266,"line":388},14,[264,390,391],{},"    \u002F\u002F Remove a language support\n",[264,393,395],{"class":266,"line":394},15,[264,396,397],{},"    suspend fun delete(tag: String)\n",[264,399,401],{"class":266,"line":400},16,[264,402,403],{},"}\n",[195,405,407],{"id":406},"integration","Integration",[186,409,410],{},"This registry is used by other components to:",[211,412,413,416,419],{},[214,414,415],{},"Validate content creation requests.",[214,417,418],{},"Filter search results by language.",[214,420,421],{},"Serve correct localized assets to users.",[423,424,425],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":5,"searchDepth":273,"depth":273,"links":427},[428,431,432,433],{"id":197,"depth":273,"text":198,"children":429},[430],{"id":208,"depth":279,"text":209},{"id":246,"depth":273,"text":247},{"id":303,"depth":273,"text":304},{"id":406,"depth":273,"text":407},"Manage supported languages and localized content across the platform.","md",{},{"title":105,"description":434},"aS7gP7U0V920f4-lHXSmH2ZbjZa7JRUcC3TICjjJsoY",[440,442],{"title":154,"path":155,"stem":156,"description":441,"children":-1},"Unified object storage with first-class signed URL support for uploads and downloads.",{"title":161,"path":162,"stem":163,"description":443,"children":-1},"Create and run Kotlin scripts directly on the server with event-driven triggers and AI agent integration.",1775372112863]