[{"data":1,"prerenderedAt":667},["ShallowReactive",2],{"docs-navigation:\u002Fdocs\u002Fmodules\u002Fvital-localization\u002Flocalization":3,"docs-page-estimated-read-time:\u002Fdocs\u002Fmodules\u002Fvital-localization\u002Flocalization":399,"docs-page:\u002Fdocs\u002Fmodules\u002Fvital-localization\u002Flocalization":400},[4,9,41,69,282],{"title":5,"path":6,"stem":7,"icon":8},"Welcome to the Vital docs","\u002Fdocs\u002Fabout","docs\u002F1.about","i-lucide-info",{"title":10,"path":11,"stem":12,"children":13,"icon":40},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F2.getting-started\u002F1.index",[14,16,35],{"title":15,"path":11,"stem":12,"icon":8},"What is Vital?",{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":34},"Installation","i-lucide-download","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F2.getting-started\u002F1.installation",[22,26,30],{"title":23,"path":24,"stem":25},"Using a starter project (~5 minutes)","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fstarter","docs\u002F2.getting-started\u002F1.installation\u002F2.starter",{"title":27,"path":28,"stem":29},"Manual configuration (~7-8 minutes)","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fmanual","docs\u002F2.getting-started\u002F1.installation\u002F3.manual",{"title":31,"path":32,"stem":33},"Using the initializer (~2-3 minutes)","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Finitializer","docs\u002F2.getting-started\u002F1.installation\u002F4.initializer",false,{"title":36,"path":37,"stem":38,"icon":39},"Main class","\u002Fdocs\u002Fgetting-started\u002Fmain-plugin-class","docs\u002F2.getting-started\u002F2.main-plugin-class","i-lucide-play","i-lucide-circle-play",{"title":42,"path":43,"stem":44,"children":45,"icon":68},"Conventions","\u002Fdocs\u002Fconventions","docs\u002F3.conventions\u002F1.index",[46,48,52,56,60,64],{"title":47,"path":43,"stem":44,"icon":8},"About",{"title":49,"path":50,"stem":51},"Spring","\u002Fdocs\u002Fconventions\u002Fspring","docs\u002F3.conventions\u002F2.spring",{"title":53,"path":54,"stem":55},"Platforms","\u002Fdocs\u002Fconventions\u002Fplatform-implementations","docs\u002F3.conventions\u002F3.platform-implementations",{"title":57,"path":58,"stem":59},"Metadata","\u002Fdocs\u002Fconventions\u002Fmetadata","docs\u002F3.conventions\u002F4.metadata",{"title":61,"path":62,"stem":63},"Lifecycles","\u002Fdocs\u002Fconventions\u002Flifecycles","docs\u002F3.conventions\u002F5.lifecycles",{"title":65,"path":66,"stem":67},"(Optional) Advanced class loading","\u002Fdocs\u002Fconventions\u002Fadvanced-classloading","docs\u002F3.conventions\u002F6.advanced-classloading","i-lucide-cog",{"title":70,"path":71,"stem":72,"children":73,"icon":281},"Modules","\u002Fdocs\u002Fmodules","docs\u002F4.modules\u002F1.index",[74,76,100,106,112,126,136,150,164,178,188,224,234,248,257,275],{"title":75,"path":71,"stem":72,"icon":8},"What are modules?",{"title":77,"path":78,"stem":79,"children":80,"icon":99},"vital-core","\u002Fdocs\u002Fmodules\u002Fvital-core","docs\u002F4.modules\u002F2.vital-core\u002F1.index",[81,83,87,91,95],{"title":82,"path":78,"stem":79,"icon":8},"About this module",{"title":84,"path":85,"stem":86},"Configuration","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Fconfiguration","docs\u002F4.modules\u002F2.vital-core\u002F2.configuration",{"title":88,"path":89,"stem":90},"Listeners","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Flisteners","docs\u002F4.modules\u002F2.vital-core\u002F3.listeners",{"title":92,"path":93,"stem":94},"Conditional beans","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Fconditional-beans","docs\u002F4.modules\u002F2.vital-core\u002F4.conditional-beans",{"title":96,"path":97,"stem":98},"Repositories","\u002Fdocs\u002Fmodules\u002Fvital-core\u002Frepositories","docs\u002F4.modules\u002F2.vital-core\u002F5.repositories","",{"title":101,"path":102,"stem":103,"children":104,"icon":99},"vital-cloudnet4-bridge","\u002Fdocs\u002Fmodules\u002Fvital-cloudnet4-bridge","docs\u002F4.modules\u002Fvital-cloudnet4-bridge\u002F1.index",[105],{"title":82,"path":102,"stem":103,"icon":8},{"title":107,"path":108,"stem":109,"children":110,"icon":99},"vital-cloudnet4-driver","\u002Fdocs\u002Fmodules\u002Fvital-cloudnet4-driver","docs\u002F4.modules\u002Fvital-cloudnet4-driver\u002F1.index",[111],{"title":82,"path":108,"stem":109,"icon":8},{"title":113,"path":114,"stem":115,"children":116,"icon":99},"vital-commands","\u002Fdocs\u002Fmodules\u002Fvital-commands","docs\u002F4.modules\u002Fvital-commands\u002F1.index",[117,118,122],{"title":82,"path":114,"stem":115,"icon":8},{"title":119,"path":120,"stem":121},"Commands","\u002Fdocs\u002Fmodules\u002Fvital-commands\u002Fcommands","docs\u002F4.modules\u002Fvital-commands\u002Fcommands",{"title":123,"path":124,"stem":125},"Exception handling","\u002Fdocs\u002Fmodules\u002Fvital-commands\u002Fexception-handling","docs\u002F4.modules\u002Fvital-commands\u002Fexception-handling",{"title":127,"path":128,"stem":129,"children":130,"icon":99},"vital-configs","\u002Fdocs\u002Fmodules\u002Fvital-configs","docs\u002F4.modules\u002Fvital-configs\u002F1.index",[131,132],{"title":82,"path":128,"stem":129,"icon":8},{"title":133,"path":134,"stem":135},"Configs","\u002Fdocs\u002Fmodules\u002Fvital-configs\u002Fconfigs","docs\u002F4.modules\u002Fvital-configs\u002F2.configs",{"title":137,"path":138,"stem":139,"children":140,"icon":99},"vital-holograms","\u002Fdocs\u002Fmodules\u002Fvital-holograms","docs\u002F4.modules\u002Fvital-holograms\u002F1.index",[141,142,146],{"title":82,"path":138,"stem":139,"icon":8},{"title":143,"path":144,"stem":145},"Global holograms","\u002Fdocs\u002Fmodules\u002Fvital-holograms\u002Fglobal-holograms","docs\u002F4.modules\u002Fvital-holograms\u002F2.global-holograms",{"title":147,"path":148,"stem":149},"Player holograms","\u002Fdocs\u002Fmodules\u002Fvital-holograms\u002Fplayer-holograms","docs\u002F4.modules\u002Fvital-holograms\u002F3.player-holograms",{"title":151,"path":152,"stem":153,"children":154,"icon":99},"vital-inventories","\u002Fdocs\u002Fmodules\u002Fvital-inventories","docs\u002F4.modules\u002Fvital-inventories\u002F1.index",[155,156,160],{"title":82,"path":152,"stem":153,"icon":8},{"title":157,"path":158,"stem":159},"Normal inventories","\u002Fdocs\u002Fmodules\u002Fvital-inventories\u002Fnormal-inventories","docs\u002F4.modules\u002Fvital-inventories\u002F2.normal-inventories",{"title":161,"path":162,"stem":163},"Paged inventories","\u002Fdocs\u002Fmodules\u002Fvital-inventories\u002Fpaged-inventories","docs\u002F4.modules\u002Fvital-inventories\u002F3.paged-inventories",{"title":165,"path":166,"stem":167,"children":168,"icon":99},"vital-items","\u002Fdocs\u002Fmodules\u002Fvital-items","docs\u002F4.modules\u002Fvital-items\u002F1.index",[169,170,174],{"title":82,"path":166,"stem":167,"icon":8},{"title":171,"path":172,"stem":173},"Items","\u002Fdocs\u002Fmodules\u002Fvital-items\u002Fitems","docs\u002F4.modules\u002Fvital-items\u002F2.items",{"title":175,"path":176,"stem":177},"Item builders","\u002Fdocs\u002Fmodules\u002Fvital-items\u002Fitem-builders","docs\u002F4.modules\u002Fvital-items\u002F3.item-builders",{"title":179,"path":180,"stem":181,"children":182,"icon":99},"vital-localization","\u002Fdocs\u002Fmodules\u002Fvital-localization","docs\u002F4.modules\u002Fvital-localization\u002F1.index",[183,184],{"title":82,"path":180,"stem":181,"icon":8},{"title":185,"path":186,"stem":187},"Localization","\u002Fdocs\u002Fmodules\u002Fvital-localization\u002Flocalization","docs\u002F4.modules\u002Fvital-localization\u002F2.localization",{"title":189,"path":190,"stem":191,"children":192,"icon":99},"vital-minigames","\u002Fdocs\u002Fmodules\u002Fvital-minigames","docs\u002F4.modules\u002Fvital-minigames\u002F1.index",[193,194,208],{"title":82,"path":190,"stem":191,"icon":8},{"title":195,"path":196,"stem":197,"children":198,"icon":99},"Global games","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Fglobal-games","docs\u002F4.modules\u002Fvital-minigames\u002F2.global-games\u002F1.index",[199,200,204],{"title":47,"path":196,"stem":197,"icon":8},{"title":201,"path":202,"stem":203},"States","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Fglobal-games\u002Fstates","docs\u002F4.modules\u002Fvital-minigames\u002F2.global-games\u002F2.states",{"title":205,"path":206,"stem":207},"Countdown states","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Fglobal-games\u002Fcountdown-states","docs\u002F4.modules\u002Fvital-minigames\u002F2.global-games\u002F3.countdown-states",{"title":209,"path":210,"stem":211,"children":212,"icon":99},"Instanced games","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F1.index",[213,214,218,221],{"title":47,"path":210,"stem":211,"icon":8},{"title":215,"path":216,"stem":217},"Instances","\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Finstances","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F2.instances",{"title":201,"path":219,"stem":220},"\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Fstates","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F3.states",{"title":205,"path":222,"stem":223},"\u002Fdocs\u002Fmodules\u002Fvital-minigames\u002Finstanced-games\u002Fcountdown-states","docs\u002F4.modules\u002Fvital-minigames\u002F3.instanced-games\u002F4.countdown-states",{"title":225,"path":226,"stem":227,"children":228,"icon":99},"vital-players","\u002Fdocs\u002Fmodules\u002Fvital-players","docs\u002F4.modules\u002Fvital-players\u002F1.index",[229,230],{"title":82,"path":226,"stem":227,"icon":8},{"title":231,"path":232,"stem":233},"Players","\u002Fdocs\u002Fmodules\u002Fvital-players\u002Fplayers","docs\u002F4.modules\u002Fvital-players\u002F2.players",{"title":235,"path":236,"stem":237,"children":238,"icon":99},"vital-scoreboards","\u002Fdocs\u002Fmodules\u002Fvital-scoreboards","docs\u002F4.modules\u002Fvital-scoreboards\u002F1.index",[239,240,244],{"title":82,"path":236,"stem":237,"icon":8},{"title":241,"path":242,"stem":243},"Global scoreboards","\u002Fdocs\u002Fmodules\u002Fvital-scoreboards\u002Fglobal-scoreboards","docs\u002F4.modules\u002Fvital-scoreboards\u002Fglobal-scoreboards",{"title":245,"path":246,"stem":247},"Player scoreboards","\u002Fdocs\u002Fmodules\u002Fvital-scoreboards\u002Fplayer-scoreboards","docs\u002F4.modules\u002Fvital-scoreboards\u002Fplayer-scoreboards",{"title":249,"path":250,"stem":251,"children":252,"icon":99},"vital-statistics","\u002Fdocs\u002Fmodules\u002Fvital-statistics","docs\u002F4.modules\u002Fvital-statistics\u002F1.index",[253,254],{"title":82,"path":250,"stem":251,"icon":8},{"title":84,"path":255,"stem":256},"\u002Fdocs\u002Fmodules\u002Fvital-statistics\u002Fconfiguration","docs\u002F4.modules\u002Fvital-statistics\u002F2.configuration",{"title":258,"path":259,"stem":260,"children":261,"icon":99},"vital-tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F1.index",[262,263,267,271],{"title":82,"path":259,"stem":260,"icon":8},{"title":264,"path":265,"stem":266},"Repeatable tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks\u002Frepeatable-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F2.repeatable-tasks",{"title":268,"path":269,"stem":270},"Countdown tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks\u002Fcountdown-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F3.countdown-tasks",{"title":272,"path":273,"stem":274},"Scheduled tasks","\u002Fdocs\u002Fmodules\u002Fvital-tasks\u002Fscheduled-tasks","docs\u002F4.modules\u002Fvital-tasks\u002F4.scheduled-tasks",{"title":276,"path":277,"stem":278,"children":279,"icon":99},"vital-utils (Also for non Vital projects)","\u002Fdocs\u002Fmodules\u002Fvital-utils","docs\u002F4.modules\u002Fvital-utils\u002F1.index",[280],{"title":82,"path":277,"stem":278,"icon":8},"i-lucide-package",{"title":283,"path":284,"stem":285,"children":286,"icon":398},"Recipes","\u002Fdocs\u002Frecipes","docs\u002F5.recipes\u002F1.index",[287,289,301,305,317,330,341,344,368,371,384],{"title":288,"path":284,"stem":285,"icon":8},"What are recipes?",{"title":119,"path":290,"stem":291,"children":292,"page":34},"\u002Fdocs\u002Frecipes\u002Fcommands","docs\u002F5.recipes\u002Fcommands",[293,297],{"title":294,"path":295,"stem":296},"Command with arg exception handler","\u002Fdocs\u002Frecipes\u002Fcommands\u002Fcommands","docs\u002F5.recipes\u002Fcommands\u002Fcommands",{"title":298,"path":299,"stem":300},"Global command exception handler","\u002Fdocs\u002Frecipes\u002Fcommands\u002Fglobal-exception-handler","docs\u002F5.recipes\u002Fcommands\u002Fglobal-exception-handler",{"title":302,"path":303,"stem":304},"Config","\u002Fdocs\u002Frecipes\u002Fconfig","docs\u002F5.recipes\u002Fconfig",{"title":306,"path":307,"stem":308,"children":309,"page":34},"Holograms","\u002Fdocs\u002Frecipes\u002Fholograms","docs\u002F5.recipes\u002Fholograms",[310,314],{"title":311,"path":312,"stem":313},"Global hologram","\u002Fdocs\u002Frecipes\u002Fholograms\u002Fglobal-holograms","docs\u002F5.recipes\u002Fholograms\u002Fglobal-holograms",{"title":147,"path":315,"stem":316},"\u002Fdocs\u002Frecipes\u002Fholograms\u002Fplayer-holograms","docs\u002F5.recipes\u002Fholograms\u002Fplayer-holograms",{"title":318,"path":319,"stem":320,"children":321,"page":34},"Inventories","\u002Fdocs\u002Frecipes\u002Finventories","docs\u002F5.recipes\u002Finventories",[322,326],{"title":323,"path":324,"stem":325},"Normal inventory","\u002Fdocs\u002Frecipes\u002Finventories\u002Fnormal-inventory","docs\u002F5.recipes\u002Finventories\u002Fnormal-inventory",{"title":327,"path":328,"stem":329},"Paged inventory","\u002Fdocs\u002Frecipes\u002Finventories\u002Fpaged-inventory","docs\u002F5.recipes\u002Finventories\u002Fpaged-inventory",{"title":171,"path":331,"stem":332,"children":333,"page":34},"\u002Fdocs\u002Frecipes\u002Fitems","docs\u002F5.recipes\u002Fitems",[334,338],{"title":335,"path":336,"stem":337},"Interactable items","\u002Fdocs\u002Frecipes\u002Fitems\u002Finteractable-items","docs\u002F5.recipes\u002Fitems\u002Finteractable-items",{"title":175,"path":339,"stem":340},"\u002Fdocs\u002Frecipes\u002Fitems\u002Fitem-builders","docs\u002F5.recipes\u002Fitems\u002Fitem-builders",{"title":185,"path":342,"stem":343},"\u002Fdocs\u002Frecipes\u002Flocalization","docs\u002F5.recipes\u002Flocalization",{"title":345,"path":346,"stem":347,"children":348,"page":34},"Minigames","\u002Fdocs\u002Frecipes\u002Fminigames","docs\u002F5.recipes\u002Fminigames",[349,353,357,361,365],{"title":350,"path":351,"stem":352},"Global minigame countdown states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Fglobal-countdown-states","docs\u002F5.recipes\u002Fminigames\u002Fglobal-countdown-states",{"title":354,"path":355,"stem":356},"Global minigame states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Fglobal-states","docs\u002F5.recipes\u002Fminigames\u002Fglobal-states",{"title":358,"path":359,"stem":360},"Instance countdown states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Finstance-countdown-states","docs\u002F5.recipes\u002Fminigames\u002Finstance-countdown-states",{"title":362,"path":363,"stem":364},"Instance states","\u002Fdocs\u002Frecipes\u002Fminigames\u002Finstance-states","docs\u002F5.recipes\u002Fminigames\u002Finstance-states",{"title":215,"path":366,"stem":367},"\u002Fdocs\u002Frecipes\u002Fminigames\u002Finstances","docs\u002F5.recipes\u002Fminigames\u002Finstances",{"title":231,"path":369,"stem":370},"\u002Fdocs\u002Frecipes\u002Fplayers","docs\u002F5.recipes\u002Fplayers",{"title":372,"path":373,"stem":374,"children":375,"page":34},"Scoreboards","\u002Fdocs\u002Frecipes\u002Fscoreboards","docs\u002F5.recipes\u002Fscoreboards",[376,380],{"title":377,"path":378,"stem":379},"Global scoreboard","\u002Fdocs\u002Frecipes\u002Fscoreboards\u002Fglobal-scoreboard","docs\u002F5.recipes\u002Fscoreboards\u002Fglobal-scoreboard",{"title":381,"path":382,"stem":383},"Player scoreboard","\u002Fdocs\u002Frecipes\u002Fscoreboards\u002Fplayer-scoreboard","docs\u002F5.recipes\u002Fscoreboards\u002Fplayer-scoreboard",{"title":385,"path":386,"stem":387,"children":388,"page":34},"Tasks","\u002Fdocs\u002Frecipes\u002Ftasks","docs\u002F5.recipes\u002Ftasks",[389,392,395],{"title":268,"path":390,"stem":391},"\u002Fdocs\u002Frecipes\u002Ftasks\u002Fcountdown-tasks","docs\u002F5.recipes\u002Ftasks\u002Fcountdown-tasks",{"title":264,"path":393,"stem":394},"\u002Fdocs\u002Frecipes\u002Ftasks\u002Frepeatable-tasks","docs\u002F5.recipes\u002Ftasks\u002Frepeatable-tasks",{"title":272,"path":396,"stem":397},"\u002Fdocs\u002Frecipes\u002Ftasks\u002Fscheduled-tasks","docs\u002F5.recipes\u002Ftasks\u002Fscheduled-tasks","i-lucide-cooking-pot",4,{"id":401,"title":185,"body":402,"description":660,"extension":661,"meta":662,"navigation":663,"path":186,"rawbody":664,"seo":665,"stem":187,"__hash__":666},"docs\u002Fdocs\u002F4.modules\u002Fvital-localization\u002F2.localization.md",{"type":403,"value":404,"toc":656},"minimark",[405,409,422,431,436,450,464,476,482,494,519,524,538,547,562,567,576,586,600,626,640,643,652],[406,407,185],"h1",{"id":408},"localization",[410,411,412,413,416,417,421],"p",{},"Once you add this module to your plugin, Vital automatically manages a locale for each player.",[414,415],"br",{},"\nYou can freely change the current player locale by using ",[418,419,420],"code",{},"VitalLocalizationModule.Spigot.setVitalLocale(Player, Locale)",".",[423,424,425],"blockquote",{},[410,426,427,428,430],{},"Note: You have to manually assign a locale to every player because Vital does not know how you store each player's locale settings.",[414,429],{},"\nTip: Set your player's locale on join.",[410,432,433,434,421],{},"To set a player's locale, use ",[418,435,420],{},[410,437,438,439,442,443,446,447,449],{},"Once a player has been assigned a locale, you can use ",[418,440,441],{},"VitalLocalizationModule.Spigot.t(Player, String, Object...)"," to get a translated version of your provided ",[418,444,445],{},"String"," resource key.",[414,448],{},"\nHere's how all of this works.",[410,451,452,453,455,456,459,460,463],{},"Your plugin must define a resource bundle that stores all of your translated messages for each language.",[414,454],{},"\nBy default, Spring will always look for files named ",[418,457,458],{},"messages_*.properties"," in your ",[418,461,462],{},"src\u002Fmain\u002Fresources"," folder.",[410,465,466,467,421,470,472,473,421],{},"E.g., if you want to have some translated messages for English, you would create a file named ",[418,468,469],{},"messages_en.properties",[414,471],{},"\nIf you need to also support German, you would create a file ",[418,474,475],{},"messages_de.properties",[410,477,478,479,481],{},"These files will contain something called resource keys and values.",[414,480],{},"\nSounds complicated but is straightforward.",[410,483,484,485,488,489,491,492,421],{},"A resource key is basically just a string like ",[418,486,487],{},"servername.pluginname.item.myitem",", all of your message bundles MUST have the same resource keys, only the values will change depending on the language file.",[414,490],{},"\nE.g., this would be your English file ",[418,493,469],{},[495,496,501],"pre",{"className":497,"code":498,"filename":499,"language":500,"meta":99,"style":99},"language-properties shiki shiki-themes material-theme-lighter github-light github-dark","servername.pluginname.item.myitem=My item name\n","src\u002Fmain\u002Fresources\u002Fmessages_en.properties","properties",[418,502,503],{"__ignoreMap":99},[504,505,508,511,515],"span",{"class":506,"line":507},"line",1,[504,509,487],{"class":510},"sFlF4",[504,512,514],{"class":513},"sP7_E","=",[504,516,518],{"class":517},"su5hD","My item name\n",[410,520,521,522,421],{},"Then this would be your German file ",[418,523,475],{},[495,525,527],{"className":497,"code":526,"filename":499,"language":500,"meta":99,"style":99},"servername.pluginname.item.myitem=Mein Item Name\n",[418,528,529],{"__ignoreMap":99},[504,530,531,533,535],{"class":506,"line":507},[504,532,487],{"class":510},[504,534,514],{"class":513},[504,536,537],{"class":517},"Mein Item Name\n",[410,539,540,541,543,544,546],{},"Now whenever you need to use a translated version of your item name, you would use ",[418,542,441],{}," to get the translated version of your resource key for that specific player.",[414,545],{},"\nVital automatically finds the correct resource key values for the player you specified.",[410,548,549,550,421,553,555,556,421,559,561],{},"So when your player currently has chosen English as his language, the method above would return ",[418,551,552],{},"My item name",[414,554],{},"\nIf the player has chosen German the method above would return ",[418,557,558],{},"Mein Item Name",[414,560],{},"\nEasy!",[563,564,566],"h2",{"id":565},"parameters","Parameters",[410,568,569,570,572,573,575],{},"Sometimes you also need to show specific data in a translated message, e.g., scores, points, etc.",[414,571],{},"\nFor that you can use Spring's parameterized message source system.",[414,574],{},"\nAgain, this sounds complex, but it is very simple, trust me.",[410,577,578,579,582,583,585],{},"Basically all this is, is that each message inside your resource bundles (",[418,580,581],{},"message_*.properties",") can also receive parameters and other values from outside.",[414,584],{},"\nE.g., if you need to display a certain dynamic value like a score, etc., your message bundle would look like this.",[495,587,589],{"className":497,"code":588,"filename":499,"language":500,"meta":99,"style":99},"servername.pluginname.item.myitem=My item name {0}\n",[418,590,591],{"__ignoreMap":99},[504,592,593,595,597],{"class":506,"line":507},[504,594,487],{"class":510},[504,596,514],{"class":513},[504,598,599],{"class":517},"My item name {0}\n",[410,601,602,603,606,607,610,611,421,613,615,616,619,620,622,623,421],{},"That ",[418,604,605],{},"{0}"," above tells Vital and Spring to include parameter 1 of the ",[418,608,609],{},"Object..."," you provided while calling ",[418,612,441],{},[414,614],{},"\nE.g., if you call this method like so ",[418,617,618],{},"VitalLocalizationModule.Spigot.t(myplayer, \"servername.pluginname.item.myitem\", \"MY NAME\")",",",[414,621],{},"\nyou would get a string like this in return ",[418,624,625],{},"My item name MY NAME",[410,627,628,629,631,632,635,636,639],{},"If you need to provide more parameters, just increment the ",[418,630,605],{}," to ",[418,633,634],{},"{1}"," and ",[418,637,638],{},"{2}"," and so on...",[641,642],"hr",{},[410,644,645,646,648,649,421],{},"Sometimes you also need to manually get translated messages for a specific locale without having access to a player object.",[414,647],{},"\nFor that you can use ",[418,650,651],{},"VitalLocalizationModule.t(Locale, String, Object...)",[653,654,655],"style",{},"html pre.shiki code .sFlF4, html code.shiki .sFlF4{--shiki-light:#E53935;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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":99,"searchDepth":657,"depth":657,"links":658},2,[659],{"id":565,"depth":657,"text":566},"This page explains how to use the `vital-localization` module to create multi-lingual plugins.","md",{},{"title":185},"---\ntitle: Localization\ndescription: This page explains how to use the `vital-localization` module to create multi-lingual plugins.\nnavigation:\n  title: Localization\n---\n\n# Localization\n\nOnce you add this module to your plugin, Vital automatically manages a locale for each player.  \nYou can freely change the current player locale by using `VitalLocalizationModule.Spigot.setVitalLocale(Player, Locale)`.\n\n> Note: You have to manually assign a locale to every player because Vital does not know how you store each player's locale settings.  \n> Tip: Set your player's locale on join.\n\nTo set a player's locale, use `VitalLocalizationModule.Spigot.setVitalLocale(Player, Locale)`.\n\nOnce a player has been assigned a locale, you can use `VitalLocalizationModule.Spigot.t(Player, String, Object...)` to get a translated version of your provided `String` resource key.  \nHere's how all of this works.\n\nYour plugin must define a resource bundle that stores all of your translated messages for each language.  \nBy default, Spring will always look for files named `messages_*.properties` in your `src\u002Fmain\u002Fresources` folder.\n\nE.g., if you want to have some translated messages for English, you would create a file named `messages_en.properties`.  \nIf you need to also support German, you would create a file `messages_de.properties`.\n\nThese files will contain something called resource keys and values.  \nSounds complicated but is straightforward.\n\nA resource key is basically just a string like `servername.pluginname.item.myitem`, all of your message bundles MUST have the same resource keys, only the values will change depending on the language file.  \nE.g., this would be your English file `messages_en.properties`.\n```properties [src\u002Fmain\u002Fresources\u002Fmessages_en.properties]\nservername.pluginname.item.myitem=My item name\n```\n\nThen this would be your German file `messages_de.properties`.\n```properties [src\u002Fmain\u002Fresources\u002Fmessages_en.properties]\nservername.pluginname.item.myitem=Mein Item Name\n```\n\nNow whenever you need to use a translated version of your item name, you would use `VitalLocalizationModule.Spigot.t(Player, String, Object...)` to get the translated version of your resource key for that specific player.  \nVital automatically finds the correct resource key values for the player you specified.\n\nSo when your player currently has chosen English as his language, the method above would return `My item name`.  \nIf the player has chosen German the method above would return `Mein Item Name`.  \nEasy!\n\n## Parameters\n\nSometimes you also need to show specific data in a translated message, e.g., scores, points, etc.  \nFor that you can use Spring's parameterized message source system.  \nAgain, this sounds complex, but it is very simple, trust me.\n\nBasically all this is, is that each message inside your resource bundles (`message_*.properties`) can also receive parameters and other values from outside.  \nE.g., if you need to display a certain dynamic value like a score, etc., your message bundle would look like this.\n\n```properties [src\u002Fmain\u002Fresources\u002Fmessages_en.properties]\nservername.pluginname.item.myitem=My item name {0}\n```\n\nThat `{0}` above tells Vital and Spring to include parameter 1 of the `Object...` you provided while calling `VitalLocalizationModule.Spigot.t(Player, String, Object...)`.  \nE.g., if you call this method like so `VitalLocalizationModule.Spigot.t(myplayer, \"servername.pluginname.item.myitem\", \"MY NAME\")`,  \nyou would get a string like this in return `My item name MY NAME`.\n\nIf you need to provide more parameters, just increment the `{0}` to `{1}` and `{2}` and so on...\n\n---\n\nSometimes you also need to manually get translated messages for a specific locale without having access to a player object.  \nFor that you can use `VitalLocalizationModule.t(Locale, String, Object...)`.  \n",{"title":185,"description":660},"qTt5Hw-ivR8qTKIxZ6r6ciIRFVeF0Eo2H-0m2Obx6LQ",1789308658758]