[{"data":1,"prerenderedAt":765},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Flocalization":180,"\u002Fdocs\u002Flocalization-surround":760},[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":754,"extension":755,"meta":756,"navigation":757,"path":106,"seo":758,"stem":107,"__hash__":759},"docs\u002F1.docs\u002F08.localization.md",{"type":183,"value":184,"toc":745},"minimark",[185,189,194,217,245,291,295,298,484,487,491,494,552,556,563,583,586,590,597,617,621,654,658,661,689,696,699,741],[186,187,188],"p",{},"Bosca includes built-in localization support through its Languages module, making it straightforward to manage the languages your platform supports and associate content with specific locales.",[190,191,193],"h2",{"id":192},"how-languages-work","How Languages Work",[186,195,196,197,201,202,206,207,206,210,206,213,216],{},"Languages in Bosca are identified by ",[198,199,200],"strong",{},"IETF BCP 47 language tags"," (e.g., ",[203,204,205],"code",{},"en",", ",[203,208,209],{},"es",[203,211,212],{},"es-419",[203,214,215],{},"pt-BR","). Each language record includes:",[218,219,220,227,233,239],"ul",{},[221,222,223,226],"li",{},[198,224,225],{},"tag"," — the IETF language tag (primary key)",[221,228,229,232],{},[198,230,231],{},"name"," — the English display name (e.g., \"Spanish\")",[221,234,235,238],{},[198,236,237],{},"localName"," — the language's name in its own script (e.g., \"Español\")",[221,240,241,244],{},[198,242,243],{},"attributes"," — optional JSON metadata for custom properties",[246,247,251],"pre",{"className":248,"code":249,"language":250,"meta":5,"style":5},"language-graphql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","type Language {\n    tag: String!\n    name: String!\n    localName: String!\n    attributes: JSON\n}\n","graphql",[203,252,253,261,267,273,279,285],{"__ignoreMap":5},[254,255,258],"span",{"class":256,"line":257},"line",1,[254,259,260],{},"type Language {\n",[254,262,264],{"class":256,"line":263},2,[254,265,266],{},"    tag: String!\n",[254,268,270],{"class":256,"line":269},3,[254,271,272],{},"    name: String!\n",[254,274,276],{"class":256,"line":275},4,[254,277,278],{},"    localName: String!\n",[254,280,282],{"class":256,"line":281},5,[254,283,284],{},"    attributes: JSON\n",[254,286,288],{"class":256,"line":287},6,[254,289,290],{},"}\n",[190,292,294],{"id":293},"pre-installed-languages","Pre-Installed Languages",[186,296,297],{},"When Bosca is first set up, the language installer seeds a default set of languages covering major world languages:",[299,300,301,317],"table",{},[302,303,304],"thead",{},[305,306,307,311,314],"tr",{},[308,309,310],"th",{},"Tag",[308,312,313],{},"Name",[308,315,316],{},"Local Name",[318,319,320,332,344,356,368,381,394,407,419,432,445,458,471],"tbody",{},[305,321,322,327,330],{},[323,324,325],"td",{},[203,326,205],{},[323,328,329],{},"English",[323,331,329],{},[305,333,334,338,341],{},[323,335,336],{},[203,337,209],{},[323,339,340],{},"Spanish",[323,342,343],{},"Español",[305,345,346,350,353],{},[323,347,348],{},[203,349,212],{},[323,351,352],{},"Spanish (Latin America)",[323,354,355],{},"Español (Latinoamérica)",[305,357,358,362,365],{},[323,359,360],{},[203,361,215],{},[323,363,364],{},"Portuguese (Brazil)",[323,366,367],{},"Português (Brasil)",[305,369,370,375,378],{},[323,371,372],{},[203,373,374],{},"fr",[323,376,377],{},"French",[323,379,380],{},"Français",[305,382,383,388,391],{},[323,384,385],{},[203,386,387],{},"hi",[323,389,390],{},"Hindi",[323,392,393],{},"हिन्दी",[305,395,396,401,404],{},[323,397,398],{},[203,399,400],{},"pl",[323,402,403],{},"Polish",[323,405,406],{},"Polski",[305,408,409,414,417],{},[323,410,411],{},[203,412,413],{},"tl",[323,415,416],{},"Tagalog",[323,418,416],{},[305,420,421,426,429],{},[323,422,423],{},[203,424,425],{},"ru",[323,427,428],{},"Russian",[323,430,431],{},"Русский",[305,433,434,439,442],{},[323,435,436],{},[203,437,438],{},"nl",[323,440,441],{},"Dutch",[323,443,444],{},"Nederlands",[305,446,447,452,455],{},[323,448,449],{},[203,450,451],{},"ko",[323,453,454],{},"Korean",[323,456,457],{},"한국어",[305,459,460,465,468],{},[323,461,462],{},[203,463,464],{},"te",[323,466,467],{},"Telugu",[323,469,470],{},"తెలుగు",[305,472,473,478,481],{},[323,474,475],{},[203,476,477],{},"sw",[323,479,480],{},"Swahili",[323,482,483],{},"Kiswahili",[186,485,486],{},"These are installed idempotently—re-running the installer will not duplicate existing entries.",[190,488,490],{"id":489},"querying-languages","Querying Languages",[186,492,493],{},"Retrieve all available languages via GraphQL:",[246,495,497],{"className":248,"code":496,"language":250,"meta":5,"style":5},"query {\n  languages {\n    all {\n      tag\n      name\n      localName\n      attributes\n    }\n  }\n}\n",[203,498,499,504,509,514,519,524,529,535,541,547],{"__ignoreMap":5},[254,500,501],{"class":256,"line":257},[254,502,503],{},"query {\n",[254,505,506],{"class":256,"line":263},[254,507,508],{},"  languages {\n",[254,510,511],{"class":256,"line":269},[254,512,513],{},"    all {\n",[254,515,516],{"class":256,"line":275},[254,517,518],{},"      tag\n",[254,520,521],{"class":256,"line":281},[254,522,523],{},"      name\n",[254,525,526],{"class":256,"line":287},[254,527,528],{},"      localName\n",[254,530,532],{"class":256,"line":531},7,[254,533,534],{},"      attributes\n",[254,536,538],{"class":256,"line":537},8,[254,539,540],{},"    }\n",[254,542,544],{"class":256,"line":543},9,[254,545,546],{},"  }\n",[254,548,550],{"class":256,"line":549},10,[254,551,290],{},[190,553,555],{"id":554},"managing-languages","Managing Languages",[186,557,558,559,562],{},"Languages can be added, edited, and removed through the ",[203,560,561],{},"LanguagesService"," API:",[218,564,565,571,577],{},[221,566,567,570],{},[198,568,569],{},"Add"," a new language by providing a tag, name, and local name",[221,572,573,576],{},[198,574,575],{},"Edit"," an existing language to update its display names or attributes",[221,578,579,582],{},[198,580,581],{},"Delete"," a language by its tag",[186,584,585],{},"This allows organizations to customize the language list to match their audience—add regional variants, remove unsupported languages, or attach custom attributes for UI configuration.",[190,587,589],{"id":588},"language-tags-in-practice","Language Tags in Practice",[186,591,592,593,596],{},"Bosca uses standard Java ",[203,594,595],{},"Locale"," facilities to resolve display names from IETF tags. This means:",[218,598,599,608,614],{},[221,600,601,602,604,605,607],{},"Regional variants like ",[203,603,212],{}," (Latin American Spanish) and ",[203,606,215],{}," (Brazilian Portuguese) are first-class citizens",[221,609,610,611,613],{},"The ",[203,612,237],{}," is automatically derived from the locale's own display name, ensuring correct capitalization and script",[221,615,616],{},"Custom or rare language tags can be added manually with any display names you choose",[190,618,620],{"id":619},"how-it-fits-together","How It Fits Together",[218,622,623,628,638,646],{},[221,624,625,627],{},[198,626,25],{},": Languages enable multi-language content strategies. Collections and metadata can be associated with specific languages for localized delivery.",[221,629,630,632,633,637],{},[198,631,70],{},": User language preferences can be stored in ",[634,635,636],"a",{"href":71},"Profile"," attributes to personalize the experience.",[221,639,640,642,643,645],{},[198,641,66],{},": Language-aware content can improve relevance in ",[634,644,66],{"href":67}," results.",[221,647,648,650,651,653],{},[198,649,74],{},": Different ",[634,652,74],{"href":75}," can support different language sets based on their audience.",[190,655,657],{"id":656},"for-developers","For Developers",[186,659,660],{},"The localization system is split across two modules:",[218,662,663,676],{},[221,664,665,668,669,672,673,675],{},[203,666,667],{},"backend\u002Fframework\u002Fcore-languages"," — model (",[203,670,671],{},"Language",") and service interface (",[203,674,561],{},")",[221,677,678,681,682,685,686],{},[203,679,680],{},"backend\u002Fframework\u002Flanguages"," — implementation, GraphQL controller (",[203,683,684],{},"LanguagesController","), and the ",[203,687,688],{},"LanguagePackageInstaller",[186,690,691,692,695],{},"The GraphQL schema is defined in ",[203,693,694],{},"backend\u002Fframework\u002Flanguages\u002Fsrc\u002Fmain\u002Fresources\u002Fgraphql\u002Flanguages.graphqls",".",[186,697,698],{},"To add a new language programmatically:",[246,700,704],{"className":701,"code":702,"language":703,"meta":5,"style":5},"language-kotlin shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","languagesService.add(\n    Language(\n        tag = \"ja\",\n        name = \"Japanese\",\n        localName = \"日本語\"\n    )\n)\n","kotlin",[203,705,706,711,716,721,726,731,736],{"__ignoreMap":5},[254,707,708],{"class":256,"line":257},[254,709,710],{},"languagesService.add(\n",[254,712,713],{"class":256,"line":263},[254,714,715],{},"    Language(\n",[254,717,718],{"class":256,"line":269},[254,719,720],{},"        tag = \"ja\",\n",[254,722,723],{"class":256,"line":275},[254,724,725],{},"        name = \"Japanese\",\n",[254,727,728],{"class":256,"line":281},[254,729,730],{},"        localName = \"日本語\"\n",[254,732,733],{"class":256,"line":287},[254,734,735],{},"    )\n",[254,737,738],{"class":256,"line":531},[254,739,740],{},")\n",[742,743,744],"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":263,"depth":263,"links":746},[747,748,749,750,751,752,753],{"id":192,"depth":263,"text":193},{"id":293,"depth":263,"text":294},{"id":489,"depth":263,"text":490},{"id":554,"depth":263,"text":555},{"id":588,"depth":263,"text":589},{"id":619,"depth":263,"text":620},{"id":656,"depth":263,"text":657},"Multi-language support for content and interfaces using IETF language tags.","md",{},true,{"title":105,"description":754},"Zl5i9K5ulaoYtlftnRpWfchO_EdOtK_Z4jIgkF2_MpA",[761,763],{"title":101,"path":102,"stem":103,"description":762,"children":-1},"Authentication, signup, credential management, and session handling in Bosca.",{"title":109,"path":110,"stem":111,"description":764,"children":-1},"Turn first-party event data into practical insights and personalized experiences.",1775372112835]