[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-settings":3,"main-navigation":153,"footer-homepage":836,"footer-integrations":903,"blog-post-nav-[USE LATEST FEATURED]":1814,"blog-post-nav-nav":1839,"blog-javascript-app-localization-i18next-localazy":1856},{"id":4,"status":5,"security_section_title":6,"loved_section_title":7,"columns":8,"social_links":113,"policy_links":143},1,"published","Secured & trusted","Loved by users",[9,28,48,74,78],{"id":4,"status":5,"sort":10,"title":11,"column_key":12,"links":13},null,"Localazy","connect",[14,18,23],{"id":15,"status":5,"sort":4,"title":16,"url":17},11,"Book a demo","___LOCALAZY_MEETING_URL___",{"id":19,"status":5,"sort":20,"title":21,"url":22},12,2,"Contact","\u002Fcontact",{"id":24,"status":5,"sort":25,"title":26,"url":27},21,3,"About us","\u002Fabout-us",{"id":20,"status":5,"sort":10,"title":29,"column_key":30,"links":31},"Programs","programs",[32,36,40,44],{"id":4,"status":5,"sort":33,"title":34,"url":35},4,"Partner Program","\u002Fpartnership",{"id":20,"status":5,"sort":37,"title":38,"url":39},5,"Ambassador Program","\u002Fambassador",{"id":25,"status":5,"sort":41,"title":42,"url":43},6,"Startup Program","\u002Ffor\u002Fstartups",{"id":33,"status":5,"sort":45,"title":46,"url":47},7,"Nonprofits","\u002Ffor\u002Fnonprofit",{"id":25,"status":5,"sort":10,"title":49,"column_key":50,"links":51},"Use Cases","use_cases",[52,56,60,64,67,70],{"id":37,"status":5,"sort":53,"title":54,"url":55},8,"Software Localization","\u002Fterm\u002Fsoftware-localization",{"id":41,"status":5,"sort":57,"title":58,"url":59},9,"Machine Translation Services","\u002Ffeatures\u002Fmachine-translation",{"id":45,"status":5,"sort":61,"title":62,"url":63},10,"Translation API","\u002Ffeatures\u002Ftranslation-api",{"id":53,"status":5,"sort":15,"title":65,"url":66},"Crowdsourced Translations","\u002Ffeatures\u002Fshare-tm",{"id":57,"status":5,"sort":19,"title":68,"url":69},"Figma i18n & localization","\u002Ffeatures\u002Ffigma-localization-plugin",{"id":61,"status":5,"sort":71,"title":72,"url":73},13,"Translation as a Service","\u002Fterm\u002Ftranslation-service",{"id":33,"status":5,"sort":10,"title":75,"column_key":76,"links":77},"Integrations","integrations",[],{"id":37,"status":5,"sort":10,"title":79,"column_key":80,"links":81},"Resources","resources",[82,86,90,94,98,102,106,110],{"id":71,"status":5,"sort":83,"title":84,"url":85},14,"Documentation","\u002Fdocs",{"id":83,"status":5,"sort":87,"title":88,"url":89},15,"Dictionary","\u002Fdictionary",{"id":87,"status":5,"sort":91,"title":92,"url":93},16,"Case Studies","\u002Fcase-study",{"id":91,"status":5,"sort":95,"title":96,"url":97},17,"Discussion forum","___DISCUSS_URL___",{"id":95,"status":5,"sort":99,"title":100,"url":101},18,"Localization Blog","\u002Fblog",{"id":99,"status":5,"sort":103,"title":104,"url":105},19,"FAQ","\u002Ffaq",{"id":103,"status":5,"sort":107,"title":108,"url":109},20,"Pricing","\u002Fpricing",{"id":107,"status":5,"sort":24,"title":111,"url":112},"Brand assets","https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Fu\u002F1\u002Ffolders\u002F1tZqsZHBlGelz7A2FwTsiwrs4j3sd9HTk",[114,119,124,129,134,139],{"id":4,"status":5,"sort":10,"platform":115,"icon":116,"url":117,"label":118},"feed","rss","\u002Ffeed.xml","Localazy RSS Feed",{"id":20,"status":5,"sort":10,"platform":120,"icon":121,"url":122,"label":123},"facebook","fb-logo","https:\u002F\u002Fwww.facebook.com\u002Flocalazy\u002F","Localazy facebook",{"id":25,"status":5,"sort":10,"platform":125,"icon":126,"url":127,"label":128},"github","github-logo","https:\u002F\u002Fgithub.com\u002Flocalazy","Localazy GitHub",{"id":33,"status":5,"sort":10,"platform":130,"icon":131,"url":132,"label":133},"x","x-twitter","https:\u002F\u002Fx.com\u002Flocalazy","Localazy X",{"id":37,"status":5,"sort":10,"platform":135,"icon":136,"url":137,"label":138},"linkedin","linkedin-logo","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002F37836599\u002F","Localazy LinkedIn",{"id":41,"status":5,"sort":10,"platform":140,"icon":141,"url":97,"label":142},"discourse","discourse-logo","Localazy Discourse",[144,147,150],{"id":4,"status":5,"sort":10,"title":145,"url":146,"action":10},"Privacy policy","\u002Fprivacy-policy",{"id":20,"status":5,"sort":10,"title":148,"url":149,"action":10},"Terms & Conditions","\u002Fterms-and-conditions",{"id":25,"status":5,"sort":10,"title":151,"url":10,"action":152},"Cookies","cookie-consent",[154,347,580,708,831,833],{"id":20,"name":155,"url":10,"url_text":10,"status":5,"groups":156},"Solutions",[157,168,239,274],{"navigation_items_group_id":158},{"id":25,"sort":37,"status":5,"name":159,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":162,"show_all_url":10,"represent_as_tile":160,"items":163},"Featured Article",false,"top",true,[164],{"collection":165,"item":166},"blog_post_navigation_item_type",{"id":33,"status":5,"sort":10,"show_author_img":162,"blog_post_tag":167,"description":10},"nav",{"navigation_items_group_id":169},{"id":37,"sort":4,"status":5,"name":170,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":171,"represent_as_tile":162,"items":172},"Your Role","\u002Froles",[173,185,195,205,216,228],{"collection":174,"item":175},"relation_navigation_item_type",{"id":4,"status":5,"sort":10,"name":176,"item":177},"CMO",[178],{"collection":179,"item":180},"personas",{"id":4,"status":5,"sort":10,"slug":181,"icon":182},"chief-marketing-officers",{"id":183,"title":184},"526097d8-176f-48e5-83d3-2fc4d77061f9","La Mail Bulk",{"collection":174,"item":186},{"id":25,"status":5,"sort":10,"name":187,"item":188},"CTO",[189],{"collection":179,"item":190},{"id":33,"status":5,"sort":10,"slug":191,"icon":192},"chief-technical-officers",{"id":193,"title":194},"f808fdf0-c78b-4294-ba59-fe25f46fe825","La Mechanic",{"collection":174,"item":196},{"id":107,"status":5,"sort":10,"name":197,"item":198},"Product Manager",[199],{"collection":179,"item":200},{"id":99,"status":5,"sort":10,"slug":201,"icon":202},"product-managers",{"id":203,"title":204},"ea39586a-21fc-4b34-ba87-496028e5198f","La Worker",{"collection":174,"item":206},{"id":207,"status":5,"sort":10,"name":208,"item":209},37,"Translator",[210],{"collection":179,"item":211},{"id":107,"status":5,"sort":10,"slug":212,"icon":213},"professional-translators",{"id":214,"title":215},"07945171-d51d-4ca8-96c0-21cde9db258f","La Chat",{"collection":174,"item":217},{"id":218,"status":5,"sort":10,"name":219,"item":220},38,"Developer",[221],{"collection":179,"item":222},{"id":223,"status":5,"sort":10,"slug":224,"icon":225},30,"software-developers",{"id":226,"title":227},"1806e46d-c551-4845-bf42-4407344d229e","La Terminal",{"collection":174,"item":229},{"id":230,"status":5,"sort":10,"name":231,"item":232},27,"Localization Manager",[233],{"collection":179,"item":234},{"id":41,"status":5,"sort":10,"slug":235,"icon":236},"localization-managers",{"id":237,"title":238},"dac69bd1-bf5d-41d0-87d4-dd13e314698a","La Language",{"navigation_items_group_id":240},{"id":57,"sort":25,"status":5,"name":241,"render_show_all_url":160,"show_all_url_position":242,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":243},"Use cases","bottom",[244,250,255,260,264,269],{"collection":245,"item":246},"simple_link_navigation_item_type",{"id":247,"status":5,"sort":10,"url":248,"url_text":249,"show_favorite_icon":160},24,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fsoftware-localization","Software localization",{"collection":245,"item":251},{"id":252,"status":5,"sort":10,"url":253,"url_text":254,"show_favorite_icon":160},26,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fmobile-app-localization","Mobile app localization",{"collection":245,"item":256},{"id":257,"status":5,"sort":10,"url":258,"url_text":259,"show_favorite_icon":160},25,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fwebsite-localization","Website localization",{"collection":245,"item":261},{"id":230,"status":5,"sort":10,"url":262,"url_text":263,"show_favorite_icon":160},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fdesign-localization","Design localization",{"collection":245,"item":265},{"id":266,"status":5,"sort":10,"url":267,"url_text":268,"show_favorite_icon":160},28,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fgame-localization","Game localization",{"collection":245,"item":270},{"id":271,"status":5,"sort":10,"url":272,"url_text":273,"show_favorite_icon":160},29,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fhelp-and-docs-localization","Help & docs localization",{"navigation_items_group_id":275},{"id":53,"sort":20,"status":5,"name":276,"render_show_all_url":160,"show_all_url_position":242,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":277},"Industry",[278,289,300,310,320,329,340],{"collection":174,"item":279},{"id":280,"status":5,"sort":10,"name":281,"item":282},23,"Digital Agencies",[283],{"collection":179,"item":284},{"id":45,"status":5,"sort":10,"slug":285,"icon":286},"digital-agencies",{"id":287,"title":288},"547f5619-b21d-4b29-86f1-8b2200313cde","La Digi Agency",{"collection":174,"item":290},{"id":291,"status":5,"sort":10,"name":292,"item":293},39,"Startups & SaaS",[294],{"collection":179,"item":295},{"id":20,"status":5,"sort":10,"slug":296,"icon":297},"startups",{"id":298,"title":299},"da1516e2-4afc-40a2-bcbf-a8161e2d610d","La Saa S",{"collection":174,"item":301},{"id":20,"status":5,"sort":10,"name":302,"item":303},"E-commerce",[304],{"collection":179,"item":305},{"id":37,"status":5,"sort":10,"slug":306,"icon":307},"e-commerce",{"id":308,"title":309},"a3d09cd2-054f-4bb5-a0a2-d3d207db65df","La Ecommerce",{"collection":174,"item":311},{"id":103,"status":5,"sort":10,"name":312,"item":313},"FinTech Platforms",[314],{"collection":179,"item":315},{"id":230,"status":5,"sort":10,"slug":316,"icon":317},"fintech",{"id":318,"title":319},"147339ba-07d1-4e5e-baad-23d27e60c919","La Money",{"collection":174,"item":321},{"id":247,"status":5,"sort":10,"name":322,"item":323},"Translation Agencies",[324],{"collection":179,"item":325},{"id":247,"status":5,"sort":10,"slug":326,"icon":327},"translation-agencies",{"id":328,"title":238},"15d6fe33-2af8-4d6e-933d-5caa64394511",{"collection":174,"item":330},{"id":331,"status":5,"sort":10,"name":332,"item":333},22,"Travel & Tourism",[334],{"collection":179,"item":335},{"id":25,"status":5,"sort":10,"slug":336,"icon":337},"tourism",{"id":338,"title":339},"23a785e8-0ae5-4c4b-8452-aab1b58182a6","La Travel",{"collection":174,"item":341},{"id":257,"status":5,"sort":10,"name":342,"item":343},"Nonprofit Causes",[344],{"collection":179,"item":345},{"id":266,"status":5,"sort":10,"slug":346,"icon":10},"nonprofit",{"id":37,"name":348,"url":10,"url_text":10,"status":5,"groups":349},"Features",[350,417,474,523],{"navigation_items_group_id":351},{"id":15,"sort":41,"status":5,"name":352,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":353},"Localization",[354,363,372,380,388,392,400,409],{"collection":174,"item":355},{"id":356,"status":5,"sort":10,"name":357,"item":358},44,"Localization services",[359],{"collection":360,"item":361},"products",{"id":57,"status":5,"slug":362},"continuous-localization-team",{"collection":174,"item":364},{"id":365,"status":5,"sort":10,"name":366,"item":367},45,"Translation management",[368],{"collection":369,"item":370},"term_landing_page",{"id":271,"status":5,"slug":371},"translation-management-system",{"collection":174,"item":373},{"id":374,"status":5,"sort":10,"name":375,"item":376},46,"Context Screenshots",[377],{"collection":360,"item":378},{"id":71,"status":5,"slug":379},"context-screenshots-ocr",{"collection":174,"item":381},{"id":382,"status":5,"sort":10,"name":383,"item":384},47,"Translation Glossary",[385],{"collection":360,"item":386},{"id":95,"status":5,"slug":387},"glossary",{"collection":245,"item":389},{"id":33,"status":5,"sort":10,"url":390,"url_text":391,"show_favorite_icon":160},"\u002Fdocs\u002Fgeneral\u002Freviewing-translations","Quality control",{"collection":174,"item":393},{"id":394,"status":5,"sort":10,"name":395,"item":396},34,"Connected Projects",[397],{"collection":360,"item":398},{"id":4,"status":5,"slug":399},"connected-projects",{"collection":174,"item":401},{"id":402,"status":5,"sort":10,"name":403,"item":404},64,"Plural handling",[405],{"collection":360,"item":406},{"id":407,"status":5,"slug":408},32,"plurals",{"collection":174,"item":410},{"id":411,"status":5,"sort":10,"name":412,"item":413},65,"Style guides",[414],{"collection":360,"item":415},{"id":218,"status":5,"slug":416},"style-guide",{"navigation_items_group_id":418},{"id":19,"sort":45,"status":5,"name":419,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":420},"Translation",[421,429,437,441,449,457,466],{"collection":174,"item":422},{"id":423,"status":5,"sort":10,"name":424,"item":425},36,"Professional translations",[426],{"collection":369,"item":427},{"id":223,"status":5,"slug":428},"professional-translation-services",{"collection":174,"item":430},{"id":431,"status":5,"sort":10,"name":432,"item":433},48,"Crowdsourced translations",[434],{"collection":360,"item":435},{"id":53,"status":5,"slug":436},"share-tm",{"collection":245,"item":438},{"id":37,"status":5,"sort":10,"url":439,"url_text":440,"show_favorite_icon":160},"\u002Fdocs\u002Fgeneral\u002Ftranslating-strings","Translation interface",{"collection":174,"item":442},{"id":443,"status":5,"sort":10,"name":444,"item":445},55,"Machine translations",[446],{"collection":360,"item":447},{"id":37,"status":5,"slug":448},"machine-translation",{"collection":174,"item":450},{"id":451,"status":5,"sort":10,"name":452,"item":453},60,"Localazy AI translation",[454],{"collection":360,"item":455},{"id":271,"status":5,"slug":456},"localazy-ai",{"collection":174,"item":458},{"id":459,"status":5,"sort":10,"name":460,"item":461},61,"Translation Memory",[462],{"collection":360,"item":463},{"id":464,"status":5,"slug":465},35,"translation-memory",{"collection":174,"item":467},{"id":468,"status":5,"sort":10,"name":469,"item":470},63,"Code & placeholders",[471],{"collection":360,"item":472},{"id":223,"status":5,"slug":473},"code-and-placeholders",{"navigation_items_group_id":475},{"id":71,"sort":53,"status":5,"name":476,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":477},"Management",[478,482,490,498,507,515,519],{"collection":245,"item":479},{"id":53,"status":5,"sort":10,"url":480,"url_text":481,"show_favorite_icon":160},"\u002Fdocs\u002Fgeneral\u002Fdefining-user-roles","User roles",{"collection":174,"item":483},{"id":484,"status":5,"sort":10,"name":485,"item":486},51,"Duplicity Linking",[487],{"collection":360,"item":488},{"id":103,"status":5,"slug":489},"duplicity-linking",{"collection":174,"item":491},{"id":492,"status":5,"sort":10,"name":493,"item":494},52,"Language Permissions",[495],{"collection":360,"item":496},{"id":24,"status":5,"slug":497},"language-permissions",{"collection":174,"item":499},{"id":500,"status":501,"sort":10,"name":502,"item":503},53,"draft","Automations",[504],{"collection":360,"item":505},{"id":107,"status":5,"slug":506},"automations",{"collection":174,"item":508},{"id":509,"status":5,"sort":10,"name":510,"item":511},58,"Branching",[512],{"collection":360,"item":513},{"id":230,"status":5,"slug":514},"branching",{"collection":245,"item":516},{"id":24,"status":501,"sort":10,"url":517,"url_text":518,"show_favorite_icon":160},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fsso-configuration","SSO",{"collection":245,"item":520},{"id":331,"status":501,"sort":10,"url":521,"url_text":522,"show_favorite_icon":160},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Flanguage-statistics","Reporting",{"navigation_items_group_id":524},{"id":83,"sort":57,"status":5,"name":525,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":526},"Development",[527,533,541,548,555,563,572],{"collection":174,"item":528},{"id":271,"status":5,"sort":10,"name":62,"item":529},[530],{"collection":360,"item":531},{"id":15,"status":5,"slug":532},"translation-api",{"collection":174,"item":534},{"id":535,"status":5,"sort":10,"name":536,"item":537},33,"Localazy CLI",[538],{"collection":360,"item":539},{"id":45,"status":5,"slug":540},"cli",{"collection":174,"item":542},{"id":407,"status":5,"sort":10,"name":543,"item":544},"Language CDN",[545],{"collection":360,"item":546},{"id":33,"status":5,"slug":547},"language-cdn",{"collection":174,"item":549},{"id":266,"status":5,"sort":10,"name":550,"item":551},"Releases",[552],{"collection":360,"item":553},{"id":41,"status":5,"slug":554},"releases",{"collection":174,"item":556},{"id":557,"status":501,"sort":10,"name":558,"item":559},57,"Format Conversions",[560],{"collection":360,"item":561},{"id":20,"status":5,"slug":562},"format-conversions",{"collection":174,"item":564},{"id":565,"status":5,"sort":10,"name":566,"item":567},59,"Webhooks",[568],{"collection":360,"item":569},{"id":570,"status":5,"slug":571},31,"webhooks",{"collection":174,"item":573},{"id":574,"status":5,"sort":10,"name":575,"item":576},62,"Export Aliases",[577],{"collection":360,"item":578},{"id":535,"status":5,"slug":579},"export-aliases",{"id":33,"name":75,"url":10,"url_text":10,"status":5,"groups":581},[582,698],{"navigation_items_group_id":583},{"id":45,"sort":61,"status":5,"name":584,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":585},"Most popular",[586],{"collection":174,"item":587},{"id":19,"status":5,"sort":10,"name":75,"item":588},[589,597,604,611,618,624,631,638,645,652,659,668,675,682,690],{"collection":590,"item":591},"platforms",{"id":41,"status":5,"sort":4,"slug":592,"name":593,"icon":594},"android","Android",{"id":595,"title":596},"ff965add-53b0-44ad-b27c-ea4ef641d384","Ic Outline Android",{"collection":590,"item":598},{"id":45,"status":5,"sort":20,"slug":599,"name":600,"icon":601},"ios","iOS",{"id":602,"title":603},"886285d7-816a-4430-b5a5-edfe307b238e","Ios",{"collection":590,"item":605},{"id":535,"status":5,"sort":25,"slug":606,"name":607,"icon":608},"react","React",{"id":609,"title":610},"26757a90-88a3-4a94-b587-9f38614ed3bd","Logos React",{"collection":590,"item":612},{"id":103,"status":5,"sort":33,"slug":613,"name":614,"icon":615},"vuejs","Vue.js",{"id":616,"title":617},"6180b41f-3249-47d3-adcd-50fe1cf11bf1","Vue",{"collection":590,"item":619},{"id":91,"status":5,"sort":37,"slug":620,"name":621,"icon":622},"angular","Angular",{"id":623,"title":621},"2a31a97a-48c5-4531-aa36-41c9dd0bdbef",{"collection":590,"item":625},{"id":4,"status":5,"sort":41,"slug":626,"name":627,"icon":628},"flutter","Flutter",{"id":629,"title":630},"b9f13a11-9328-4a03-86cf-b20de0685606","Logos Flutter",{"collection":590,"item":632},{"id":25,"status":5,"sort":15,"slug":633,"name":634,"icon":635},"typescript","TypeScript",{"id":636,"title":637},"8d1319b5-8a96-4199-8407-00add3418b1f","Logos Typescript Icon",{"collection":590,"item":639},{"id":570,"status":5,"sort":19,"slug":640,"name":641,"icon":642},"javascript","JavaScript",{"id":643,"title":644},"4218d0c9-7e6b-494d-9663-37ceaf93ee8c","Logos Javascript",{"collection":590,"item":646},{"id":19,"status":5,"sort":107,"slug":647,"name":648,"icon":649},"json","JSON",{"id":650,"title":651},"99ac3b7c-dba5-4693-a4f4-1f27a6d7782d","Logos Json",{"collection":590,"item":653},{"id":24,"status":5,"sort":24,"slug":654,"name":655,"icon":656},"xliff","XLIFF",{"id":657,"title":658},"ca424cc8-e8a7-4aef-8dca-ef4a4d1334fc","Format",{"collection":590,"item":660},{"id":661,"status":5,"sort":662,"slug":663,"name":664,"icon":665},72,54,"strapi","Strapi",{"id":666,"title":667},"cde7f1d0-f2e0-4243-929e-a3f8f9146e69","Strapi Logo Purple",{"collection":590,"item":669},{"id":451,"status":5,"sort":443,"slug":670,"name":671,"icon":672},"figma","Figma",{"id":673,"title":674},"813745a4-a77d-4735-93b7-e0dd731b2304","Figma Icon",{"collection":590,"item":676},{"id":484,"status":5,"sort":382,"slug":677,"name":678,"icon":679},"microsoft-excel","Microsoft Excel",{"id":680,"title":681},"7a175955-7b96-4561-939f-a0e1924faa40","Excel",{"collection":590,"item":683},{"id":684,"status":5,"sort":459,"slug":685,"name":686,"icon":687},66,"github-actions","GitHub Actions",{"id":688,"title":689},"da17554f-ac6d-443d-9bac-1f29645ec1c6","Github Icon",{"collection":590,"item":691},{"id":692,"status":5,"sort":693,"slug":694,"name":695,"icon":696},97,999,"webflow","Webflow",{"id":697,"title":695},"ff43a386-52f8-499f-b77c-ab9a30f4a77e",{"navigation_items_group_id":699},{"id":33,"sort":15,"status":5,"name":700,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":701},"Explore more",[702],{"collection":703,"item":704},"text_link_navigation_item_type",{"id":4,"status":5,"sort":10,"text":705,"url":706,"url_text":707},"Localazy is a technology-agnostic platform supporting 50+ frameworks, file formats & popular tools.","\u002Fintegrations","See all integrations",{"id":4,"name":79,"url":10,"url_text":10,"status":5,"groups":709},[710,734,740],{"navigation_items_group_id":711},{"id":4,"sort":19,"status":5,"name":712,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":713},"Helpful Links",[714,717,719,723,725,728,730],{"collection":245,"item":715},{"id":71,"status":5,"sort":10,"url":101,"url_text":716,"show_favorite_icon":162},"Localazy Blog",{"collection":245,"item":718},{"id":83,"status":5,"sort":10,"url":85,"url_text":84,"show_favorite_icon":162},{"collection":245,"item":720},{"id":4,"status":5,"sort":10,"url":721,"url_text":722,"show_favorite_icon":160},"https:\u002F\u002Fdiscuss.localazy.com\u002F","Discussion Forum",{"collection":245,"item":724},{"id":19,"status":5,"sort":10,"url":93,"url_text":92,"show_favorite_icon":160},{"collection":245,"item":726},{"id":25,"status":5,"sort":10,"url":35,"url_text":727,"show_favorite_icon":160},"Become a Partner",{"collection":245,"item":729},{"id":87,"status":5,"sort":10,"url":105,"url_text":104,"show_favorite_icon":160},{"collection":245,"item":731},{"id":95,"status":5,"sort":10,"url":732,"url_text":733,"show_favorite_icon":160},"\u002Ftags\u002Frelease-update","Release Updates",{"navigation_items_group_id":735},{"id":20,"sort":83,"status":5,"name":716,"render_show_all_url":162,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":101,"represent_as_tile":160,"items":736},[737],{"collection":165,"item":738},{"id":25,"status":5,"sort":10,"show_author_img":160,"blog_post_tag":739,"description":10},"[USE LATEST FEATURED]",{"navigation_items_group_id":741},{"id":41,"sort":71,"status":5,"name":84,"render_show_all_url":162,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":85,"represent_as_tile":160,"items":742},[743,757,769,780,792,802,813,821],{"collection":174,"item":744},{"id":33,"status":5,"sort":10,"name":745,"item":746},"General",[747],{"collection":748,"item":749},"docs_section",{"id":20,"status":5,"sort":4,"slug":750,"name":745,"icon":751,"featured_icon":754},"general",{"id":752,"title":753},"423101f1-308c-42f1-8dfe-53272019e7cb","Global",{"id":755,"title":756},"0f7ca4cb-dc3b-4f62-b476-132ed5c4931f","General Doc",{"collection":174,"item":758},{"id":37,"status":5,"sort":10,"name":759,"item":760},"CLI",[761],{"collection":748,"item":762},{"id":25,"status":5,"sort":20,"slug":540,"name":759,"icon":763,"featured_icon":766},{"id":764,"title":765},"2f7a4573-8265-4d76-8d55-ce0cc79b8983","Cli",{"id":767,"title":768},"3f76ff7b-0e74-4046-bb03-4ca99c3b66d5","Doc Cat Cli",{"collection":174,"item":770},{"id":53,"status":5,"sort":10,"name":771,"item":772},"API",[773],{"collection":748,"item":774},{"id":107,"status":5,"sort":25,"slug":775,"name":771,"icon":776,"featured_icon":777},"api",{"id":764,"title":765},{"id":778,"title":779},"20866781-e69b-4e01-9456-05437487b75c","API Doc",{"collection":174,"item":781},{"id":782,"status":5,"sort":10,"name":783,"item":784},50,"CDN",[785],{"collection":748,"item":786},{"id":252,"status":5,"sort":33,"slug":787,"name":783,"icon":788,"featured_icon":789},"cdn",{"id":752,"title":753},{"id":790,"title":791},"a8ee9cb7-4e02-41f0-b595-eb518c3085b6","Doc Cat Cdn",{"collection":174,"item":793},{"id":41,"status":5,"sort":10,"name":593,"item":794},[795],{"collection":748,"item":796},{"id":4,"status":5,"sort":37,"slug":592,"name":593,"icon":797,"featured_icon":799},{"id":798,"title":593},"fb8329ae-0c0c-4fbc-bcdc-83f2eeda1039",{"id":800,"title":801},"f7c0dec8-5b42-4943-ab3a-e3665723ad6f","Doc Cat Android",{"collection":174,"item":803},{"id":45,"status":5,"sort":10,"name":600,"item":804},[805],{"collection":748,"item":806},{"id":33,"status":5,"sort":41,"slug":599,"name":600,"icon":807,"featured_icon":810},{"id":808,"title":809},"289e136c-55df-4d51-847b-1782a2308ee4","Ios Blue",{"id":811,"title":812},"2968d3f0-14b5-4427-82e7-f1ea2de17846","Doc Cat Ios",{"collection":174,"item":814},{"id":57,"status":5,"sort":10,"name":671,"item":815},[816],{"collection":748,"item":817},{"id":24,"status":5,"sort":45,"slug":670,"name":671,"icon":818,"featured_icon":819},{"id":764,"title":765},{"id":820,"title":671},"f5e66b5b-a439-47f6-af4a-6ad261de2e87",{"collection":174,"item":822},{"id":61,"status":5,"sort":10,"name":664,"item":823},[824],{"collection":748,"item":825},{"id":280,"status":5,"sort":53,"slug":663,"name":664,"icon":826,"featured_icon":828},{"id":827,"title":664},"3b4b03c7-e131-49e6-a014-c8c2c8a2751e",{"id":829,"title":830},"1dd05c76-e517-4aea-a3d8-49cfddb40056","Strapi Doc",{"id":25,"name":108,"url":109,"url_text":108,"status":5,"groups":832},[],{"id":41,"name":16,"url":834,"url_text":16,"status":5,"groups":835},"\u002Fbook-demo",[],{"status":5,"header_badges":837,"footer_badges":855,"footer_secured_badges":861,"slider_badges":873},[838,845,850],{"id":4,"status":5,"sort":10,"link":839,"title":840,"badgeType":841,"badgeName":842,"metadata":10,"image":843},"https:\u002F\u002Fwww.g2.com\u002Fproducts\u002Flocalazy\u002Freviews","Best meets requirements","Other","G2-winter-24-best-meets-requirments",{"id":844},"8d5dd6fd-6995-4c92-8219-a6ed5ba6acdc",{"id":20,"status":5,"sort":10,"link":839,"title":846,"badgeType":841,"badgeName":847,"metadata":10,"image":848},"Best support","G2-winter-24-best-support",{"id":849},"e59dd465-84d9-45c7-987d-dd4048fd6992",{"id":25,"status":5,"sort":10,"link":839,"title":851,"badgeType":841,"badgeName":852,"metadata":10,"image":853},"Easiest admin","G2-winter-24-easiest-admin",{"id":854},"5f12c4c8-bec0-47cf-87b4-a4502e9f1bd2",[856],{"id":19,"status":5,"sort":10,"link":839,"title":857,"badgeType":841,"badgeName":858,"metadata":10,"image":859},"Users love us","Users love us 25",{"id":860},"232416a5-86ba-4be6-85a5-b88802003d53",[862,868],{"id":15,"status":5,"sort":10,"link":863,"title":864,"badgeType":841,"badgeName":865,"metadata":10,"image":866},"https:\u002F\u002Fsprinto.com\u002Fget-iso-27001\u002F","Sprinto ISO 27001","Sprinto ISO 27001 certificate",{"id":867},"c1c6c06c-6caf-4b78-8a7e-9606c395eb61",{"id":71,"status":5,"sort":10,"link":869,"title":870,"badgeType":841,"badgeName":870,"metadata":10,"image":871},"https:\u002F\u002Fwww.aicpa.org\u002Fsoc4so","SOC certificate",{"id":872},"4f4bc0a6-09a0-41df-8295-8f990d96d941",[874,880,884,888,892,896,901],{"id":37,"status":5,"sort":10,"link":839,"title":875,"badgeType":841,"badgeName":876,"metadata":877,"image":878},"Most likely to recommend","a","",{"id":879},"da055731-3f11-4fc7-96f2-c11c0b84c831",{"id":41,"status":5,"sort":10,"link":839,"title":881,"badgeType":841,"badgeName":10,"metadata":10,"image":882},"EMEA High Performer",{"id":883},"586fb488-81f2-41db-a4e8-ef309e50c0e6",{"id":45,"status":5,"sort":10,"link":839,"title":885,"badgeType":841,"badgeName":10,"metadata":10,"image":886},"Ease of Doing Business With",{"id":887},"bfa26865-430e-463d-9886-cb56a8a8ecf6",{"id":53,"status":5,"sort":10,"link":839,"title":889,"badgeType":841,"badgeName":10,"metadata":10,"image":890},"High Performer",{"id":891},"2cc1ba0f-c23a-4c97-ad4a-a655c97466fe",{"id":57,"status":5,"sort":10,"link":839,"title":893,"badgeType":841,"badgeName":10,"metadata":10,"image":894},"Fastest Implementation",{"id":895},"6f297758-1c95-45f4-a6e9-528319897132",{"id":61,"status":5,"sort":10,"link":897,"title":898,"badgeType":841,"badgeName":10,"metadata":10,"image":899},"https:\u002F\u002Fwww.intercert.com\u002Fservices\u002Fgovernance-risk-compliance\u002Fiso-iec-27001","Intercert ISO 27001",{"id":900},"0521a5f1-e1f2-4da6-a2bc-dc92773f2a7b",{"id":15,"status":5,"sort":10,"link":863,"title":864,"badgeType":841,"badgeName":865,"metadata":10,"image":902},{"id":867},[904,1044,1122,1228,1314,1393,1482,1573,1660,1759],{"id":535,"status":5,"created_on":905,"modified_on":906,"name":607,"slug":606,"description":907,"docs_link":908,"priority":10,"has_sdk":160,"sort":25,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":909,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"is_enterprise":160,"is_popular":160,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":913,"upload_features":914,"icon":915,"meta_image":916,"primary_tag":918,"tags":934,"integration_methods":952,"recommended_methods":1028,"default_integration_method":1029,"faq_categories":1036,"translations":1042,"platforms_id":535},"2022-03-18T08:09:24.000Z","2025-02-26T13:36:08.000Z","Manage your React app translations with Localazy, a continuous localization tool. React i18n done right. ","\u002Fdocs\u002Fcli\u002Fjson-format","JSON format support","CLI support","react-i18next and more","Use Localazy to translate your React projects with your favorite i18n library.",{"json":647},[],{"id":609},{"id":917},"a97492ec-ee8d-429c-bf66-d0fe59b6e5c9",{"id":37,"status":5,"sort":20,"created_on":919,"label":920,"hidden":160,"icon":921,"translations":923},"2022-03-17T12:23:44.000Z","Web apps",{"id":922},"c9e70e4f-8136-432a-8d82-53c3501a9eb4",[924,926,929,932],{"id":37,"languages_code":925,"label":920},"xxa",{"id":365,"languages_code":927,"label":928},"es","Aplicaciones web",{"id":782,"languages_code":930,"label":931},"cs","Webové aplikace",{"id":565,"languages_code":933,"label":920},"en",[935,942],{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":936,"translations":937},{"id":922},[938,939,940,941],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":53,"status":5,"sort":57,"label":943,"hidden":160,"created_on":944,"icon":10,"translations":945},"Framework","2022-03-17T12:23:45.000Z",[946,947,949,950],{"id":53,"languages_code":925,"label":943},{"id":500,"languages_code":927,"label":948},"Marco",{"id":451,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},67,[953,965,990,1011],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":956},"Translate strings directly or upload them into your Localazy project.","\u002Fdocs\u002Fapi\u002Fintroduction",[957,958,961,963],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},40,"Utilice la API para exportar traducciones e importar contenido de\u002Fa Localazy mediante programación.",{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},"Choose between translating strings directly or uploading them into Localazy.",{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},"Pomocí rozhraní API můžete programovaně exportovat překlady a importovat obsah z\u002Fdo Localazy.",{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":971},"Create source keys online","add-keys-manually","Add source keys via the web interface online and sync them into your project later.","\u002Fdocs\u002Fgeneral\u002Fimporting-localization-files#add-new-keys-in-ui","vpn-key-outline",[972,973,976,977,980,983,984,985],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},"Cree claves fuente en línea","Añada claves fuente a través de la interfaz web en línea y sincronícelas posteriormente en su proyecto.",{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},"Vytvářejte zdrojové klíče online","Přidejte zdrojové klíče přes webové rozhraní online a synchronizujte je do svého projektu později.",{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},"Cree claves de origen en línea","Añada claves de origen a través de la interfaz web en línea y sincronícelas posteriormente en su proyecto.",{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},88,"de","Erstellen Sie Quellschlüssel online","Fügen Sie Quellschlüssel über die Weboberfläche online hinzu und synchronisieren Sie sie später mit Ihrem Projekt.",{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":997},"Direct file upload","File upload","web-upload","Upload your texts and existing translations in any format directly to start quickly.","\u002Fdocs\u002Fgeneral\u002Fimporting-localization-files","file-upload",[998,999,1002,1003,1007],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},"Carga directa de archivos","Cargue sus textos y traducciones existentes en cualquier formato directamente para empezar rápidamente.",{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},56,"Přímé nahrávání souborů","Nahrajte přímo své texty a stávající překlady v libovolném formátu a začněte pracovat ihned.",{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},85,"Direkter Datei-Upload","Laden Sie Ihre Texte und vorhandenen Übersetzungen in einem beliebigen Format direkt hoch, um schnell loszulegen.",{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1015},"Command Line Interface","The best option for developers that want to make localization an automated part of their workflow.","\u002Fdocs\u002Fcli\u002Fthe-basics",[1016,1017,1020,1021,1024],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},"Interfaz de Línea de Comandos","La mejor opción para los desarrolladores que deseen hacer de la localización una parte automatizada de su flujo de trabajo.",{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},"Rozhraní Příkazového Řádku","Nejlepší volba pro vývojáře, kteří chtějí, aby se lokalizace stala automatizovanou součástí jejich pracovních postupů.",{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},87,"Befehlszeilenschnittstelle","Die beste Option für Entwickler, die die Lokalisierung zu einem automatisierten Teil ihres Arbeitsablaufs machen möchten.",[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1030},[1031,1032,1033,1034,1035],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1037],{"id":1038,"status":5,"created_on":1039,"sort":10,"slug":1040,"label":1041,"on_faq_index":10},76,"2025-02-26T12:44:29.000Z","front-end-common","Front-end Common",[1043],{"languages_code":925,"name":607,"slug":606,"description":907,"support_type":909,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"id":535,"platforms_id":535,"docs_link":908},{"id":103,"status":5,"created_on":905,"modified_on":1045,"name":614,"slug":613,"description":1046,"docs_link":908,"priority":10,"has_sdk":160,"sort":33,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":909,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"is_enterprise":160,"is_popular":160,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":1049,"upload_features":1050,"icon":1051,"meta_image":1052,"primary_tag":1054,"tags":1061,"integration_methods":1075,"recommended_methods":1106,"default_integration_method":1107,"faq_categories":1114,"translations":1120,"platforms_id":103},"2025-02-26T13:35:41.000Z","Online Vue.js project localization tool for your translation management. Enjoy true continuous localization with Localazy & translate your JSON files automatically.","Vue.js & JSON","Enjoy true continuous localization with Localazy & translate your Vue projects automatically.",{"json":647},[],{"id":616},{"id":1053},"8171b836-d6b8-4354-8db3-34ccd384970d",{"id":37,"status":5,"sort":20,"created_on":919,"label":920,"hidden":160,"icon":1055,"translations":1056},{"id":922},[1057,1058,1059,1060],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},[1062,1069],{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":1063,"translations":1064},{"id":922},[1065,1066,1067,1068],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":53,"status":5,"sort":57,"label":943,"hidden":160,"created_on":944,"icon":10,"translations":1070},[1071,1072,1073,1074],{"id":53,"languages_code":925,"label":943},{"id":500,"languages_code":927,"label":948},{"id":451,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},[1076,1082,1092,1099],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1077},[1078,1079,1080,1081],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1083},[1084,1085,1086,1087,1088,1089,1090,1091],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1093},[1094,1095,1096,1097,1098],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1100},[1101,1102,1103,1104,1105],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1108},[1109,1110,1111,1112,1113],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1115,1119],{"id":1004,"status":5,"created_on":1116,"sort":10,"slug":1117,"label":1118,"on_faq_index":10},"2023-03-01T11:21:41.000Z","vue-localization","Vue.js Localization",{"id":1038,"status":5,"created_on":1039,"sort":10,"slug":1040,"label":1041,"on_faq_index":10},[1121],{"languages_code":925,"name":614,"slug":613,"description":1046,"support_type":909,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"id":103,"platforms_id":103,"docs_link":908},{"id":4,"status":5,"created_on":905,"modified_on":1123,"name":627,"slug":626,"description":1124,"docs_link":1125,"priority":10,"has_sdk":160,"sort":41,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1126,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":160,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"is_enterprise":160,"is_popular":160,"primary_use_case":1128,"hierarchy_handling":1129,"best_for":1130,"file_extension":1131,"format_code_example":1132,"format_to_extension":1133,"upload_features":1135,"icon":1136,"meta_image":1137,"primary_tag":1139,"tags":1150,"integration_methods":1186,"recommended_methods":1217,"default_integration_method":1218,"faq_categories":1225,"translations":1226,"platforms_id":4},"2025-07-03T14:21:42.000Z","Learn how to use Localazy CLI for localization of Flutter app. Flutter’s ARB format is fully supported including arrays, plurals, and selected context information. No extra configuration is necessary, but you can enable certain features if you want to.","\u002Fdocs\u002Fcli\u002Fflutter-format","ARB format support","Use the Localazy CLI for localization of Flutter projects. Flutter’s ARB format is fully supported.","Supports metadata like placeholders","JSON-like key-value","Flutter apps",".arb","```\n{\n  \"localazy_message\": \"Go international, today. With Localazy.\"\n}\n```",{"arb":1134},"arb",[],{"id":629},{"id":1138},"c2674666-4371-4aa4-9a65-438c7363fafe",{"id":41,"status":5,"sort":53,"created_on":944,"label":1140,"hidden":160,"icon":1141,"translations":1143},"Mobile apps",{"id":1142},"c9c7e1f5-8b59-4016-ae0c-6fba9469cd55",[1144,1145,1147,1149],{"id":41,"languages_code":925,"label":1140},{"id":374,"languages_code":927,"label":1146},"Aplicaciones móviles",{"id":443,"languages_code":930,"label":1148},"Mobilní aplikace",{"id":411,"languages_code":933,"label":1140},[1151,1162,1169,1176],{"id":45,"status":5,"sort":103,"label":1152,"hidden":160,"created_on":944,"icon":1153,"translations":1155},"Desktop & Games",{"id":1154},"65b04533-5b4c-430c-b8a4-ecce84754200",[1156,1157,1159,1161],{"id":45,"languages_code":925,"label":1152},{"id":382,"languages_code":927,"label":1158},"Escritorio y Juegos",{"id":1004,"languages_code":930,"label":1160},"Stolní počítače & Hry",{"id":684,"languages_code":933,"label":1152},{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":1163,"translations":1164},{"id":922},[1165,1166,1167,1168],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":41,"status":5,"sort":53,"label":1140,"hidden":160,"created_on":944,"icon":1170,"translations":1171},{"id":1142},[1172,1173,1174,1175],{"id":41,"languages_code":925,"label":1140},{"id":374,"languages_code":927,"label":1146},{"id":443,"languages_code":930,"label":1148},{"id":411,"languages_code":933,"label":1140},{"id":223,"status":5,"sort":407,"label":1177,"hidden":162,"created_on":944,"icon":10,"translations":1178},"ARB",[1179,1180,1182,1184],{"id":223,"languages_code":925,"label":1177},{"id":1181,"languages_code":927,"label":1177},120,{"id":1183,"languages_code":930,"label":1177},125,{"id":1185,"languages_code":933,"label":1177},130,[1187,1193,1203,1210],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1188},[1189,1190,1191,1192],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1194},[1195,1196,1197,1198,1199,1200,1201,1202],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1204},[1205,1206,1207,1208,1209],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1211},[1212,1213,1214,1215,1216],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1219},[1220,1221,1222,1223,1224],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],[1227],{"languages_code":925,"name":627,"slug":626,"description":1124,"support_type":1126,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"id":4,"platforms_id":4,"docs_link":1125},{"id":570,"status":5,"created_on":1229,"modified_on":1230,"name":641,"slug":640,"description":1231,"docs_link":1232,"priority":10,"has_sdk":160,"sort":19,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1233,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"is_enterprise":160,"is_popular":160,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":1235,"upload_features":1237,"icon":1238,"meta_image":1239,"primary_tag":1241,"tags":1254,"integration_methods":1269,"recommended_methods":1300,"default_integration_method":1301,"faq_categories":1308,"translations":1312,"platforms_id":570},"2022-03-18T08:09:25.000Z","2024-07-17T07:43:22.000Z","Localize your app with JavaScript localizations and Localazy CLI.\nUpload JavaScript files with strings to Localazy and manage your translations easily. Download translated files back.","\u002Fdocs\u002Fcli\u002Fjavascript-format","JS file support","Translating JS files is easy as a pie with Localazy!",{"js":1236},"js",[],{"id":643},{"id":1240},"2c6699eb-1d80-4772-8268-5597dbcead8c",{"id":61,"status":5,"sort":61,"created_on":944,"label":1242,"hidden":160,"icon":1243,"translations":1245},"Programming Languages",{"id":1244},"8c5836bb-1fbe-49c5-9330-8f931838c457",[1246,1247,1249,1252],{"id":61,"languages_code":925,"label":1242},{"id":468,"languages_code":927,"label":1248},"Lenguajes de Programación",{"id":1250,"languages_code":930,"label":1251},68,"Programovací Jazyky",{"id":1253,"languages_code":933,"label":1242},70,[1255,1262],{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":1256,"translations":1257},{"id":922},[1258,1259,1260,1261],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":61,"status":5,"sort":61,"label":1242,"hidden":160,"created_on":944,"icon":1263,"translations":1264},{"id":1244},[1265,1266,1267,1268],{"id":61,"languages_code":925,"label":1242},{"id":468,"languages_code":927,"label":1248},{"id":1250,"languages_code":930,"label":1251},{"id":1253,"languages_code":933,"label":1242},[1270,1276,1286,1293],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1271},[1272,1273,1274,1275],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1277},[1278,1279,1280,1281,1282,1283,1284,1285],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1287},[1288,1289,1290,1291,1292],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1294},[1295,1296,1297,1298,1299],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1302},[1303,1304,1305,1306,1307],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1309],{"id":464,"status":5,"created_on":1310,"sort":10,"slug":1311,"label":641,"on_faq_index":160},"2022-06-10T09:49:33.000Z","javascript-i18n-localization",[1313],{"languages_code":925,"name":641,"slug":640,"description":1231,"support_type":1233,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"id":570,"platforms_id":570,"docs_link":1232},{"id":19,"status":5,"created_on":1229,"modified_on":1315,"name":648,"slug":647,"description":1316,"docs_link":908,"priority":10,"has_sdk":160,"sort":107,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1317,"show_in_spa":162,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"is_enterprise":160,"is_popular":162,"primary_use_case":1320,"hierarchy_handling":1321,"best_for":1322,"file_extension":1323,"format_code_example":1324,"format_to_extension":1325,"upload_features":1326,"icon":1327,"meta_image":1328,"primary_tag":1330,"tags":1341,"integration_methods":1349,"recommended_methods":1380,"default_integration_method":1381,"faq_categories":1388,"translations":1391,"platforms_id":19},"2025-10-14T11:22:29.000Z","Online JSON translator you will love. Comfortable JSON language files editor with powerful CLI under your fingers for continuous localization.","Advanced format support","{Objectively the best}","Translate any JSON files with Localazy, with the best in class plural and array support.","Used for structured data storage and APIs","Uses key-value pairs","Web & mobile apps, APIs",".json","```\n{\n  \"parent\": {\n    \"child\": {\n      \"another_nested_level\": \"All is supported.\"\n    }\n  }\n}\n```",{"json":647},[],{"id":650},{"id":1329},"8d614c20-667e-4bee-a64d-7d7ce9c0ee0a",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1332,"translations":1334},"File formats",{"id":1333},"ab7c8f89-dcce-45ab-9e21-8605aef289c3",[1335,1336,1338,1340],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},"Formatos de archivo",{"id":484,"languages_code":930,"label":1339},"Formáty souborů",{"id":574,"languages_code":933,"label":1331},[1342],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1343,"translations":1344},{"id":1333},[1345,1346,1347,1348],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1350,1356,1366,1373],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1351},[1352,1353,1354,1355],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1357},[1358,1359,1360,1361,1362,1363,1364,1365],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1367},[1368,1369,1370,1371,1372],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1374},[1375,1376,1377,1378,1379],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1382},[1383,1384,1385,1386,1387],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1389],{"id":423,"status":5,"created_on":1390,"sort":10,"slug":647,"label":648,"on_faq_index":160},"2022-06-10T10:49:07.000Z",[1392],{"languages_code":925,"name":648,"slug":647,"description":1316,"support_type":1317,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"id":19,"platforms_id":19,"docs_link":908},{"id":24,"status":5,"created_on":1229,"modified_on":1394,"name":655,"slug":654,"description":1395,"docs_link":1396,"priority":10,"has_sdk":160,"sort":24,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1397,"show_in_spa":160,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"is_enterprise":160,"is_popular":162,"primary_use_case":1400,"hierarchy_handling":1401,"best_for":1402,"file_extension":1403,"format_code_example":1404,"format_to_extension":1405,"upload_features":1407,"icon":1408,"meta_image":1409,"primary_tag":1411,"tags":1418,"integration_methods":1440,"recommended_methods":1471,"default_integration_method":1472,"faq_categories":1479,"translations":1480,"platforms_id":24},"2025-07-03T14:28:31.000Z","XLIFF is meant for localization. Enjoy Localazy - an online XLIFF editor for your translation management. Integrate your XLIFF files with Localazy to achieve true continuous localization and translate XLIFF files on autopilot.","\u002Fdocs\u002Fcli\u002Fxliff-12-format","File format support","Meant for localization","XLIFF stands for XML Localization Interchange File Format - and Localazy is the best way to manage XLIFF files.","Used in translation pipelines","XML-based exchange format","Translation & software",".xliff","```\n\u003Ctrans-unit id=\"localazy_message\">\n    \u003Csource>Go international, today. With Localazy.\u003C\u002Fsource>\n\u003C\u002Ftrans-unit>\n```",{"xliff":1406},"xlf",[],{"id":657},{"id":1410},"889970a6-cce8-4055-b96a-9c3f292aa67f",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1412,"translations":1413},{"id":1333},[1414,1415,1416,1417],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1419,1426,1433],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1420,"translations":1421},{"id":1333},[1422,1423,1424,1425],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1427,"translations":1428},{"id":1333},[1429,1430,1431,1432],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1434,"translations":1435},{"id":1333},[1436,1437,1438,1439],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1441,1447,1457,1464],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1442},[1443,1444,1445,1446],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1448},[1449,1450,1451,1452,1453,1454,1455,1456],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1458},[1459,1460,1461,1462,1463],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1465},[1466,1467,1468,1469,1470],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1473},[1474,1475,1476,1477,1478],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],[1481],{"languages_code":925,"name":655,"slug":654,"description":1395,"support_type":1397,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"id":24,"platforms_id":24,"docs_link":1396},{"id":107,"status":5,"created_on":1483,"modified_on":1483,"name":1484,"slug":1485,"description":1486,"docs_link":1487,"priority":10,"has_sdk":160,"sort":247,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1397,"show_in_spa":162,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":160,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"is_enterprise":160,"is_popular":162,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":1490,"upload_features":1491,"icon":1492,"meta_image":1494,"primary_tag":1496,"tags":1503,"integration_methods":1531,"recommended_methods":1562,"default_integration_method":1563,"faq_categories":1570,"translations":1571,"platforms_id":107},"2026-05-21T20:49:09.000Z","PO","po","Edit .po and .pot files with your team, automate translation with AI, and ship faster.","\u002Fdocs\u002Fcli\u002Fpo-format","Seamless integration","Upload, edit and translate PO files with Localazy.",{"po":1485},[],{"id":1493},"25f317fe-0c10-4f0b-92cd-f80d1f3c6a67",{"id":1495},"490022f9-d91a-4e1a-9e79-db374ec997c2",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1497,"translations":1498},{"id":1333},[1499,1500,1501,1502],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1504,1511,1521],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1505,"translations":1506},{"id":1333},[1507,1508,1509,1510],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":394,"status":5,"sort":394,"label":1512,"hidden":162,"created_on":944,"icon":10,"translations":1513},"C++",[1514,1515,1517,1519],{"id":394,"languages_code":925,"label":1512},{"id":1516,"languages_code":927,"label":1512},135,{"id":1518,"languages_code":930,"label":1512},140,{"id":1520,"languages_code":933,"label":1512},144,{"id":24,"status":5,"sort":247,"label":1522,"hidden":162,"created_on":944,"icon":10,"translations":1523},"Gettext",[1524,1525,1527,1529],{"id":24,"languages_code":925,"label":1522},{"id":1526,"languages_code":927,"label":1522},101,{"id":1528,"languages_code":930,"label":1522},106,{"id":1530,"languages_code":933,"label":1522},111,[1532,1538,1548,1555],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1533},[1534,1535,1536,1537],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1539},[1540,1541,1542,1543,1544,1545,1546,1547],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1549},[1550,1551,1552,1553,1554],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1556},[1557,1558,1559,1560,1561],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1564},[1565,1566,1567,1568,1569],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],[1572],{"languages_code":925,"name":1484,"slug":1485,"description":1486,"support_type":1397,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"id":107,"platforms_id":107,"docs_link":1487},{"id":252,"status":5,"created_on":1229,"modified_on":1574,"name":1575,"slug":1576,"description":1577,"docs_link":1578,"priority":10,"has_sdk":160,"sort":230,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1397,"show_in_spa":162,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":160,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"is_enterprise":160,"is_popular":160,"primary_use_case":1581,"hierarchy_handling":1582,"best_for":1583,"file_extension":1584,"format_code_example":1585,"format_to_extension":1586,"upload_features":1587,"icon":1588,"meta_image":1589,"primary_tag":1591,"tags":1598,"integration_methods":1616,"recommended_methods":1647,"default_integration_method":1648,"faq_categories":1655,"translations":1658,"platforms_id":252},"2025-10-02T08:32:44.000Z","RESX","resx","Quickly translate and manage your RESX files with Localazy or integrate Localazy with your .NET project and enjoy a fully automated localization process. ","\u002Fdocs\u002Fcli\u002Fresx-format",".NET localization","Translate .NET projects using RESX files and Localazy.","Standard format for Windows\u002F.NET localization","Flat key-value structure",".NET applications",".resx","```\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Croot>\n  \u003Cdata name=\"localazy_message\" xml:space=\"preserve\">\n    \u003Cvalue>Go international, today. With Localazy.\u003C\u002Fvalue>\n  \u003C\u002Fdata>\n\u003C\u002Froot>\n```",{"resx":1576},[],{"id":1493},{"id":1590},"1f07bf83-9363-47d6-b21b-a5121c0efaf6",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1592,"translations":1593},{"id":1333},[1594,1595,1596,1597],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1599,1606],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1600,"translations":1601},{"id":1333},[1602,1603,1604,1605],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":247,"status":5,"sort":252,"label":1607,"hidden":162,"created_on":944,"icon":10,"translations":1608},"C#",[1609,1610,1612,1614],{"id":247,"languages_code":925,"label":1607},{"id":1611,"languages_code":927,"label":1607},103,{"id":1613,"languages_code":930,"label":1607},108,{"id":1615,"languages_code":933,"label":1607},113,[1617,1623,1633,1640],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1618},[1619,1620,1621,1622],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1624},[1625,1626,1627,1628,1629,1630,1631,1632],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1634},[1635,1636,1637,1638,1639],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1641},[1642,1643,1644,1645,1646],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1649},[1650,1651,1652,1653,1654],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1656],{"id":356,"status":5,"created_on":1657,"sort":10,"slug":1576,"label":1575,"on_faq_index":10},"2022-08-01T16:44:06.000Z",[1659],{"languages_code":925,"name":1575,"slug":1576,"description":1577,"support_type":1397,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"id":252,"platforms_id":252,"docs_link":1578},{"id":661,"status":5,"created_on":1661,"modified_on":1662,"name":664,"slug":663,"description":1663,"docs_link":1664,"priority":10,"has_sdk":10,"sort":662,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1665,"show_in_spa":162,"is_file_format":10,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"is_enterprise":160,"is_popular":162,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":10,"upload_features":10,"icon":1667,"meta_image":1668,"primary_tag":1670,"tags":1682,"integration_methods":1726,"recommended_methods":1746,"default_integration_method":1747,"faq_categories":1754,"translations":1757,"platforms_id":661},"2022-06-16T09:08:11.000Z","2026-04-27T18:16:54.000Z","Enjoy seamless integration of Strapi & Localazy and translate your website efficiently. Download the official Localazy plugin in the Strapi Marketplace to get started!","\u002Fdocs\u002Fstrapi\u002Fstrapi-plugin-introduction","Localization Plugin","Localize your Strapi website with our official localization plugin. Easy setup and installation.",{"id":666},{"id":1669},"5995b721-a2ea-487e-ad4b-298a489bbd24",{"id":19,"status":5,"sort":15,"created_on":944,"label":1671,"hidden":160,"icon":1672,"translations":1674},"CMS",{"id":1673},"1172a655-928c-4594-9263-d8afdfd9cd79",[1675,1676,1678,1680],{"id":19,"languages_code":925,"label":1671},{"id":1677,"languages_code":927,"label":1671},73,{"id":1679,"languages_code":930,"label":1671},81,{"id":1681,"languages_code":933,"label":1671},84,[1683,1695,1707,1714],{"id":99,"status":5,"sort":95,"label":1684,"hidden":160,"created_on":944,"icon":10,"translations":1685},"Multilingual SEO",[1686,1687,1690,1693],{"id":99,"languages_code":925,"label":1684},{"id":1688,"languages_code":927,"label":1689},89,"SEO multilingüe",{"id":1691,"languages_code":930,"label":1692},94,"Vícejazyčné SEO",{"id":1694,"languages_code":933,"label":1684},99,{"id":535,"status":5,"sort":535,"label":302,"hidden":160,"created_on":944,"icon":1696,"translations":1698},{"id":1697},"e782ed3f-d954-45ca-8b17-5bf5fe95f30a",[1699,1700,1703,1705],{"id":535,"languages_code":925,"label":302},{"id":1701,"languages_code":927,"label":1702},132,"Comercio electrónico",{"id":1704,"languages_code":930,"label":302},137,{"id":1706,"languages_code":933,"label":302},142,{"id":19,"status":5,"sort":15,"label":1671,"hidden":160,"created_on":944,"icon":1708,"translations":1709},{"id":1673},[1710,1711,1712,1713],{"id":19,"languages_code":925,"label":1671},{"id":1677,"languages_code":927,"label":1671},{"id":1679,"languages_code":930,"label":1671},{"id":1681,"languages_code":933,"label":1671},{"id":20,"status":5,"sort":41,"label":1715,"hidden":160,"created_on":944,"icon":1716,"translations":1718},"Marketing tools",{"id":1717},"098fe6a4-dd2e-42d8-937e-2d8121e6e266",[1719,1720,1723,1725],{"id":20,"languages_code":925,"label":1715},{"id":1721,"languages_code":927,"label":1722},43,"Herramientas de marketing",{"id":431,"languages_code":930,"label":1724},"Marketingové nástroje",{"id":509,"languages_code":933,"label":1715},[1727],{"id":53,"status":5,"sort":10,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1734},"Official Strapi Plugin","Official Plugin","official-strapi-plugin","Our developers maintain an official Strapi localization plugin. Start in a few clicks!","\u002Fdocs\u002Fstrapi","localazy-box",[1735,1736,1739,1740,1743],{"id":53,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":10},"Complemento Oficial de Strapi","Nuestros desarrolladores mantienen un complemento oficial de localización de Strapi. ¡Empiece en unos pocos clics!",{"id":500,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":574,"languages_code":930,"label":1741,"description":1742,"slug":10},"Oficiál Plugin Strapi","Naši vývojáři udržují a neustále vylepšují oficiální lokalizační plugin Strapi. Začněte několika kliknutími!",{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":10},"Offizielles Strapi-Plugin","Unsere Entwickler pflegen ein offizielles Strapi-Lokalisierungs-Plugin. Starten Sie mit ein paar Klicks!",[],{"id":53,"status":5,"sort":10,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1748},[1749,1750,1751,1752,1753],{"id":53,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":10},{"id":500,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":574,"languages_code":930,"label":1741,"description":1742,"slug":10},{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":10},[1755],{"id":207,"status":5,"created_on":1756,"sort":10,"slug":663,"label":664,"on_faq_index":10},"2022-06-16T09:24:13.000Z",[1758],{"languages_code":925,"name":664,"slug":663,"description":1663,"support_type":1665,"meta_title":10,"meta_description":10,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"id":661,"platforms_id":661,"docs_link":1664},{"id":451,"status":5,"created_on":1229,"modified_on":1760,"name":671,"slug":670,"description":10,"docs_link":1761,"priority":10,"has_sdk":160,"sort":443,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1762,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"is_enterprise":160,"is_popular":162,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":10,"upload_features":1766,"icon":1767,"meta_image":1768,"primary_tag":1770,"tags":1783,"integration_methods":1791,"recommended_methods":1804,"default_integration_method":1805,"faq_categories":1811,"translations":1812,"platforms_id":451},"2024-12-20T15:00:22.000Z","\u002Fdocs\u002Fintegrations\u002Fquick-start-figma","plugin","Figma plugin","Localization plugin","Quickly translate your Figma designs and seamlessly reuse the translations during the development of your project.",[],{"id":673},{"id":1769},"7573fed6-8817-4cb4-84d2-be327e6c4891",{"id":25,"status":5,"sort":45,"created_on":944,"label":1771,"hidden":160,"icon":1772,"translations":1774},"Design tools",{"id":1773},"1053d863-b690-4fbd-aadf-dbf2ba282768",[1775,1776,1779,1782],{"id":25,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},42,"Herramientas de diseño",{"id":1780,"languages_code":930,"label":1781},49,"Nástroje pro návrh",{"id":557,"languages_code":933,"label":1771},[1784],{"id":25,"status":5,"sort":45,"label":1771,"hidden":160,"created_on":944,"icon":1785,"translations":1786},{"id":1773},[1787,1788,1789,1790],{"id":25,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},{"id":1780,"languages_code":930,"label":1781},{"id":557,"languages_code":933,"label":1771},[1792],{"id":45,"status":5,"sort":10,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":85,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1795},"official-plugin","Our developers maintain an official plugin for this integration. Start in a few clicks!",[1796,1797,1800,1801],{"id":45,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":280,"languages_code":927,"label":1798,"description":1799,"slug":10},"Plugin Oficial","Nuestros desarrolladores mantienen un plugin oficial para esta integración. ¡Empiece con unos pocos clics!",{"id":271,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":464,"languages_code":930,"label":1802,"description":1803,"slug":10},"Oficiální Plugin","Naši vývojáři udržují a neustále vylepšují oficiální plugin pro tuto integraci. Začněte několika kliknutími!",[],{"id":45,"status":5,"sort":10,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":85,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1806},[1807,1808,1809,1810],{"id":45,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":280,"languages_code":927,"label":1798,"description":1799,"slug":10},{"id":271,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":464,"languages_code":930,"label":1802,"description":1803,"slug":10},[],[1813],{"languages_code":925,"name":671,"slug":670,"description":10,"support_type":1762,"meta_title":10,"meta_description":10,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"id":451,"platforms_id":451,"docs_link":1761},{"id":1815,"owner":1816,"created_by":10,"sort":10,"title":1821,"slug":1822,"modified_on":877,"created_on":1823,"pinned":160,"badge":10,"priority":1824,"main_image":1825,"status":5,"tags":1826,"dictionary":1837,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"6a145e3f8550a300014081e4",{"id":1817,"first_name":1818,"last_name":877,"slug":1819,"avatar":1820},"65647a510470910001942876","Dorota Pawlak","dorota-pawlak","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F07\u002Fdorota.png","The great LLM translation war, pt. 2: Context beats model choice in 2026","the-great-llm-translation-war-pt-2-2026","2026-06-05T14:56:58.000+02:00","0.7","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F06\u002Flocalazy-AI-series-11.png",[1827,1831,1834],{"id":402,"created_on":1828,"status":5,"label":1829,"slug":1830,"on_index_page":162},"2026-06-06 03:06:09","AI","ai",{"id":402,"created_on":1828,"status":5,"label":1832,"slug":1833,"on_index_page":160},"ChatGPT","chatgpt",{"id":451,"created_on":1828,"status":5,"label":1835,"slug":1836,"on_index_page":160},"Translations","translations",[],0,{"id":1840,"owner":1841,"created_by":10,"sort":10,"title":1846,"slug":1847,"modified_on":877,"created_on":1848,"pinned":160,"badge":10,"priority":1824,"main_image":1849,"status":5,"tags":1850,"dictionary":1855,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"69d78a237ab1270001eddabf",{"id":1842,"first_name":1843,"last_name":877,"slug":1844,"avatar":1845},"606c233dcf7b6a0001d1da93","Petr Hodný","petr-hodny","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fpetr.png","Translation API: Translate your content on the fly with Localazy AI!","translation-api-translate-your-content-on-the-fly-with-localazy-ai","2026-04-24T09:27:26.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F04\u002FLocalazy-AI-translation-api.png",[1851,1852,1853],{"id":451,"created_on":1828,"status":5,"label":771,"slug":775,"on_index_page":160},{"id":402,"created_on":1828,"status":5,"label":1829,"slug":1830,"on_index_page":162},{"id":451,"created_on":1828,"status":5,"label":352,"slug":1854,"on_index_page":162},"localization",[],{"post":1857,"relatedPosts":2017,"banner":2075},{"id":1858,"owner":1859,"created_by":10,"sort":10,"title":1864,"slug":1865,"modified_on":1866,"created_on":1867,"pinned":160,"badge":10,"priority":1824,"main_image":1868,"status":5,"tags":1869,"dictionary":1877,"reading_time":57,"excerpt":1941,"og_title":877,"og_description":877,"og_image":877,"content":1942,"meta_title":877,"meta_description":877,"canonical":877,"cta":1943,"fullGhostPost":1951},"60a37fc7cf7b6a0001d1f1b4",{"id":1860,"first_name":1861,"last_name":877,"slug":1862,"avatar":1863},"6062091b2a37af00016d4140","Jan Bílek","jan-bilek","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fhonza.png","JavaScript app localization with i18next and Localazy","javascript-app-localization-i18next-localazy","2026-04-16T16:31:35.000+02:00","2020-12-08T12:58:02.000+01:00","https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F01cb8b1d-4ee0-4dcb-9841-9b161ee9be35",[1870,1871,1872,1875],{"id":451,"created_on":1828,"status":5,"label":759,"slug":540,"on_index_page":160},{"id":451,"created_on":1828,"status":5,"label":641,"slug":640,"on_index_page":160},{"id":451,"created_on":1828,"status":5,"label":1873,"slug":1874,"on_index_page":160},"HowTo","howto",{"id":451,"created_on":1828,"status":5,"label":1876,"slug":1876,"on_index_page":162},"i18n",[1878,1897,1912,1923],{"id":1879,"status":5,"owner":1880,"created_on":1881,"title":641,"excerpt":1882,"content":1883,"slug":640,"meta_title":877,"meta_description":10,"canonical":10,"related_terms":1884},75,"2bac48a8-b362-482f-b574-3bc71dca4c5b","2022-03-17T12:22:55.000Z","JavaScript is a scripting language that allows developers to create interactive web interfaces.","JavaScript is a scripting language that makes it possible to dynamically update content, control multimedia, animate images, and achieve many other things. Most websites use JavaScript on the client-side to change how pages look and behave when users interact with them. JavaScript is most well-known as the scripting language for web interfaces, although many non-browser environments also use it, such as [Node.js](\u002Fdictionary\u002Fnodejs). \n\nJavaScript first appeared in 1995. Brendan Eich of Netscape initially designed it, but others have also contributed to the ECMAScript standard that forms the basis of JavaScript.\n\nJavaScript is the basis for many popular web development frameworks, such as:\n- [Vue.js](\u002Fdictionary\u002Fvuejs)\n- [Angular](\u002Fdictionary\u002Fangular)\n- [React](\u002Fdictionary\u002Freact)\n\nLocalazy supports [integrations](\u002Fintegrations) with many JavaScript frameworks and file formats.\n\n## Helpful resources:\n- [MDN Web Docs - JavaScript](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript) \n- [JavaScript.com Learning Resources](https:\u002F\u002Fwww.javascript.com\u002F)\n- [Tutorial: How to localize JavaScript project with Localazy](\u002Fblog\u002Fjavascript-app-localization-i18next-localazy)",[1885,1887,1888,1890,1891,1894],{"id":1886,"slug":633},74,{"id":1250,"slug":606},{"id":1889,"slug":620},69,{"id":1253,"slug":613},{"id":1892,"slug":1893},80,"nodejs",{"id":1895,"slug":1896},77,"nuxt",{"id":20,"status":5,"owner":1880,"created_on":1898,"title":352,"excerpt":1899,"content":1900,"slug":1854,"meta_title":10,"meta_description":10,"canonical":10,"related_terms":1901},"2022-03-17T12:22:54.000Z","The process of preparing a product for a particular market.","Localization (l10n) is an essential part of the **[internationalization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization)** process. During localization, a product is prepared to be used in a particular destination, language and culture. Part of the localization process consists of changing locales such as currency, text orientation, or date format; and aligning the product with local, technical, or legislative requirements.\n\nA crucial part of localization is **[translation](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ftranslation\u002F)**.\n\nLocalization is the process of adapting an internationalized product to meet the specific needs of a target market by translating it into the native language of that market. This includes translating the user interface, text, graphics, and other content to match the specific target locale.\n\nThe goal of localization is to provide an optimal user experience for the target market, as well as to make the product accessible to a wider audience. This process often involves more than just translation, and may include adjusting graphics, changing text length to accommodate different writing systems, and modifying the product's layout to fit cultural differences.\n\nInternationalization and localization are essential components of **[globalization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fglobalization)** (g11n) and play a key role in expanding a product's reach and success. It's important to ensure that any Creative Commons attribution is considered during localization to prevent copyright infringement.\n\nBy localizing products, companies can reach new markets and increase their customer base, ultimately helping their business grow and thrive. The number of letters in the term i18n and l10n refers to the number of characters between the first and last letters in the term, and is used as a shorthand for internationalization and localization, respectively.",[1902,1903,1905,1907,1909],{"id":20,"slug":1854},{"id":33,"slug":1904},"translation",{"id":57,"slug":1906},"gilt",{"id":291,"slug":1908},"translation-management-system-tms",{"id":1910,"slug":1911},79,"internationalization",{"id":1910,"status":5,"owner":1880,"created_on":1913,"title":1914,"excerpt":1915,"content":1916,"slug":1911,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":1917},"2026-05-12T07:09:23.000Z","Internationalization (i18n)","The process of making your software localizable.","Internationalization (i18n) is the process of preparing software, digital products, and content so they can be easily adapted for various languages, regions, and cultures without requiring extensive reengineering.\n\nThis foundational step ensures that a product can be efficiently localized to meet the needs of different global markets. To internationalize your software, you need to pay attention to technical requirements. The code structure and design has to be prepared to allow for [localization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Flocalization).\n\nIt involves considering various linguistic and cultural factors during the initial design and development phases. This process should start, ideally, in the design phase. For example, you may want to have externalised strings so you can bring your strings to the translation management tool.\n\nEvery business looking to expand their reach and provide User Experiences (UX) across diverse markets needs to consider internationalization and then localization.\n\n## 🌐 Key points about internationalization (i18n): \n\n* Internationalization involves creating flexible and adaptable designs that accommodate various languages, scripts, and cultural norms.\n* By preparing content and software for localization, internationalization simplifies the process of translating and adapting products for specific markets.\n* This process includes using Unicode, supporting different character sets, and ensuring compatibility with various regional formats (dates, currencies, etc.).\n* Investing in internationalization upfront reduces the time and cost associated with localizing products for multiple markets.\n\nBy prioritizing internationalization, companies can create products that are more versatile and ready for global distribution, ensuring they meet the needs of international users effectively.",[1918,1919,1920,1922],{"id":20,"slug":1854},{"id":33,"slug":1904},{"id":37,"slug":1921},"globalization",{"id":57,"slug":1906},{"id":986,"status":5,"owner":1880,"created_on":1913,"title":1924,"excerpt":1925,"content":1926,"slug":1924,"meta_title":10,"meta_description":10,"canonical":10,"related_terms":1927},"i18next","i18next is one of the top open-source internationalization frameworks written in and for JavaScript.","i18next is a powerful open-source internationalization (i18n) framework built for JavaScript. It provides a flexible, JSON-based approach to localization, and it works well with modern tech stacks, including popular frameworks like React, Angular, and Node, as well as platforms such as iOS and Ruby on Rails.\n\n[i18next](https:\u002F\u002Fwww.i18next.com\u002F) supports all key i18n features like plurals, context, and interpolation. It offers a flexible and scalable solution for localizing products across web, mobile, and desktop applications.\n\n### Key points about i18next: 🔧\n\n- **It’s versatile.**  i18next supports a wide range of modern tech stacks, making it adaptable for different environments and platforms.\n- **It’s a comprehensive localization solution.** In addition to standard i18n features, i18next offers advanced capabilities for managing translations and content variations.\n- **It’s flexible and extensible.** Its plugin-based system lets you extend functionality to match your needs, whether it’s through adding middleware, loading external translations, or detecting languages.\n- **It works across platforms.** i18next can be used for web, mobile, and desktop applications, providing consistent localization across different platforms.\n- **Supports multiple environments.** It works well with both server-side (Node.js, Express) and client-side (React, Angular) applications, giving you a consistent translation framework for all environments.\n- **It integrates with Localazy.** i18next integrates smoothly with localization platforms like Localazy, enhancing efficiency in managing multilingual software projects.\n\ni18next simplifies the internationalization process, making it easy to build localized experiences that scale across different platforms and audiences. It can be a great addition to your tech stack if you’re looking to localize your products. \n\n**[See the list of available integrations](\u002Fintegrations)**",[1928,1929,1930,1931,1932,1933,1936,1938],{"id":20,"slug":1854},{"id":1879,"slug":640},{"id":1910,"slug":1911},{"id":1250,"slug":606},{"id":1253,"slug":613},{"id":1934,"slug":1935},156,"next.js",{"id":1679,"slug":1937},"ruby-on-rails",{"id":1939,"slug":1940},78,"rails-i18n","Localization is hardly the most favourite part of development for anyone. Regardless of whether it is a web, mobile, or desktop app, it is time-consuming and error-prone. This article shows a quick and seamless way of integrating the process into any JavaScript app.","\u003C!--kg-card-begin: html-->\u003Cp>We won’t use any JavaScript framework only to stay focused on the sole purpose of this article. All code examples are supposed to demonstrate the general concept, so feel free to take any part of them and adapt it to your own app’s specific needs.\u003C\u002Fp>\n\u003Ch2 id=\"why-localazy-and-i18next\" id=\"why-localazy-and-i18next\">Why Localazy and i18next? \u003Ca class=\"markdownit-header-anchor\" href=\"#why-localazy-and-i18next\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Localazy is a developer-focused localization management platform that supports a wide variety of frameworks and an even more comprehensive range of formats through its CLI. Localazy’s best features are a pro-active review process, highly accurate translation memory supported by community-shared translations, and a simple, crystal clear UI which is not bloated with rarely used options.\u003C\u002Fp>\n\u003Cp>As we’ll show shortly, it works seamlessly with \u003Ca href=\"\u002Fdictionary\u002Fi18next\">i18next library\u003C\u002Fa>, which is one of the most popular choices when it comes to internationalization in JavaScript apps. Thanks to that, managing translations in professional teams or even in open-source projects where anybody can contribute is a piece of cake 🍰.\u003C\u002Fp>\n\u003Ch2 id=\"create-a-new-project\" id=\"create-a-new-project\">Create a new project \u003Ca class=\"markdownit-header-anchor\" href=\"#create-a-new-project\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Let’s start with an empty project. We will use \u003Ccode>npm\u003C\u002Fcode> to manage dependencies, so make sure you have \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002F\">Node.js\u003C\u002Fa> installed. You can verify the installation by running \u003Ccode>npm -v\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">mkdir localize-js-app &amp;&amp; cd localize-js-app &amp;&amp; npm init\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>After running the above command and answering the initial questions, a \u003Ccode>package.json\u003C\u002Fcode> file should be created. Let’s complete our empty project structure to look like the tree below. These should be all the files we’ll need initially.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">.\n├── index.html\n├── package.json\n├── src\n│   ├── i18n.js\n│   └── index.js\n└── style.css\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Paste the following content into your \u003Ccode>index.html\u003C\u002Fcode> file. This will be our app index, and we’re not going to touch it anymore, since we’re going to create all content dynamically with JavaScript.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n  &lt;title&gt;Localize Javascript App with Localazy&lt;\u002Ftitle&gt;\n  &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot;\u002F&gt;\n  &lt;meta charset=&quot;UTF-8&quot; \u002F&gt;\n&lt;\u002Fhead&gt;\n&lt;body&gt;\n  &lt;div id=&quot;app&quot;&gt;&lt;\u002Fdiv&gt;\n  &lt;script src=&quot;src\u002Findex.js&quot;&gt;\n  &lt;\u002Fscript&gt;\n&lt;\u002Fbody&gt;\n&lt;\u002Fhtml&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To work with the project more conveniently, let’s install \u003Ccode>parcel-bundler\u003C\u002Fcode>  first.\nIf you don’t know \u003Ca href=\"https:\u002F\u002Fparceljs.org\u002Fgetting_started.html\">Parcel\u003C\u002Fa> yet, it’s a web application bundler, with a great developer experience. It offers blazing-fast performance and requires zero configuration. So basically with one package installed, you’ll get a development server with hot-reloading and production builds. Excellent for quick projects and rapid prototyping.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install -D parcel-bundler\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can then simplify running the Parcel bundler by adding a \u003Cem>run\u003C\u002Fem> and \u003Cem>build\u003C\u002Fem> task to the scripts section in your \u003Ccode>package.json\u003C\u002Fcode>. Once done, try to run the development server with  \u003Ccode>npm start\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;scripts&quot;: {\n    &quot;start&quot;: &quot;parcel index.html --open&quot;,\n    &quot;build&quot;: &quot;parcel build index.html&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"add-source-language\" id=\"add-source-language\">Add source language \u003Ca class=\"markdownit-header-anchor\" href=\"#add-source-language\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Create new \u003Ccode>src\u002Flocales\u003C\u002Fcode> folder next to our \u003Ccode>index.js\u003C\u002Fcode> file and put an \u003Ccode>en.json\u003C\u002Fcode> file inside it. This will be our base language for the app.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">.\n├── index.html\n├── package.json\n├── src\n│   ├── i18n.js\n│   ├── index.js\n│   └── locales\n│       └── en.json\n└── style.css\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Let’s add a couple of simple translatable strings in English.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;hello_localazy&quot;: &quot;Hello Localazy!&quot;,\n  &quot;calendar&quot;: &quot;Calendar&quot;,\n  &quot;field&quot;: &quot;Field&quot;,\n  &quot;event&quot;: &quot;Event&quot;,\n  &quot;title&quot;: &quot;Title&quot;,\n  &quot;color&quot;: &quot;Color&quot;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>As a next step, we’re going to install the \u003Ccode>i18next\u003C\u002Fcode> library.  It will help us to quickly load all the locales we have,   get our content translated by some convinient methods it provides and eventually to implement a custom language switcher. We will get to it shortly.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install i18next\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To test that the library works for us, we need to import the base strings and initialize the \u003Ccode>i18next\u003C\u002Fcode> object.\nAdd the following content to the \u003Ccode>i18n.js\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F i18n.js\nimport i18next from &quot;i18next&quot;;\nimport enJson from &quot;.\u002Flocales\u002Fen.json&quot;;\n\nexport const i18n = i18next;\n\nexport const initI18n = (callback) =&gt; {\n  i18next.init({\n    lng: &quot;en&quot;,\n    debug: true,\n    resources: {\n      en: {\n        translation: enJson,\n      },\n    },\n  }, function (err, t) {\n    \u002F\u002F Call this function once i18next is initialized\n    callback()\n  });\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And run the initializer in \u003Ccode>index.js\u003C\u002Fcode>.  We pass the \u003Ccode>createPageContent\u003C\u002Fcode> function as a callback when the initialization finishes. To test that the translations are loaded correctly, we simply set some text to the \u003Ccode>#app\u003C\u002Fcode>  content. Note that this is not an optimal approach and might get unmaintainable in bigger projects, but it should serve well for our demonstrating purposes.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F index.js\nimport { i18n, initI18n } from &quot;.\u002Fi18n&quot;;\n\nconst createPageContent = () =&gt; {\n  document.querySelector(&quot;#app&quot;).innerHTML = i18n.t(&quot;hello_localazy&quot;);\n}\ninitI18n(createPageContent);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Going back to the browser while having the server running, you should see the \u003Ccode>Hello Localazy!\u003C\u002Fcode> greeting to appear. Awesome, we have the basic setup working, but let’s get the phrases translated now.\nNow, that’s where the fun begins. In real-life projects, we don’t want to handle translations in JSON manually, it’s usually very tedious and error-prone. Also, we need some sort of a quality control mechanism, to ensure that the translations meet the required standards. With Localazy you get all of this plus automated translations as a bonus.\u003C\u002Fp>\n\u003Ch2 id=\"integrate-with-localazy\" id=\"integrate-with-localazy\">Integrate with Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#integrate-with-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Go to \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fregister\">Localazy signup\u003C\u002Fa> and create an account, then create a new app. I’m leaving it public, this way other people can freely contribute with their translations. Source language is English, and community translations enabled. They will help us to translate some parts of the app automatically.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F13a7ec4a-5103-4524-b16d-bc8032c2b616\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Now in your app, from the available integrations select JavaScript.  The setup steps you see there is a general-purpose quick start, but I’ll give you more precise instructions here, so read on. The only thing needed is to note down the \u003Ccode>readKey\u003C\u002Fcode> and \u003Ccode>writeKey\u003C\u002Fcode>, we will need them in a moment.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F27c90278-0f8f-4b20-9aba-dc4b576d83d7\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Now we need to configure our app to synchronize strings with Localazy. Go back to your app’s terminal and install \u003Ca href=\"https:\u002F\u002Ftesting.localazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">Localazy CLI\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install -D @localazy\u002Fcli\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then create a new file called \u003Ccode>localazy.json\u003C\u002Fcode> in your project root, paste the following content. This is a configuration for the CLI we’ve just installed.  Don’t forget to fill in the keys, you’ve noted earlier. If you would like to better understand the used configuration, go to the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">Localazy CLI\u003C\u002Fa> documentation, where you’ll find all the necessary details.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">\u002F\u002F localazy.json\n{\n  &quot;writeKey&quot;: &quot;&lt;your-write-key&gt;&quot;,\n  &quot;readKey&quot;: &quot;&lt;your-read-key&gt;&quot;, \n  &quot;upload&quot;: {  \n    &quot;type&quot;: &quot;json&quot;,\n    &quot;files&quot;: &quot;src\u002Flocales\u002Fen.json&quot;         \n  },\n  &quot;download&quot;: {\n    &quot;files&quot;: &quot;src\u002Flocales\u002F${lang}.json&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>In \u003Ccode>package.json\u003C\u002Fcode>  add  \u003Ccode>upload\u003C\u002Fcode> and \u003Ccode>download\u003C\u002Fcode> tasks to the \u003Ccode>&quot;scripts&quot;\u003C\u002Fcode> section, right after the parcel commands. You can also add a \u003Ccode>list\u003C\u002Fcode>  task, to check what files are available on the platform, but we won’t need it in this article specifically.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;scripts&quot;: {\n    &quot;start&quot;: &quot;parcel index.html --open&quot;,\n    &quot;build&quot;: &quot;parcel build index.html&quot;,\n    &quot;upload&quot;: &quot;localazy upload&quot;,\n    &quot;download&quot;: &quot;localazy download&quot;,\n    &quot;list&quot;: &quot;localazy list&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If set up correctly, you should be able to run \u003Ccode>npm run upload\u003C\u002Fcode> to upload strings. Note that you can always run the tasks with the \u003Ccode>-s\u003C\u002Fcode> option to simulate the action and verify that everything is configured correctly. No files will be uploaded or written then.\u003C\u002Fp>\n\u003Cp>Now go back to your app at Localazy, you should see our base language (English) to appear.  If successful, try to add some new language. Some of the languages might be already translated by ShareTM technology.  Adding one of these languages will show you a review button, where you can approve the suggested phrases. If you add language without suggestions, you can start translating immediately with the help of classic machine translations.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Fa4fec7c4-9b9a-4427-9a31-2f715d7fca9a\" alt=\"\">\u003C\u002Fp>\n\u003Cp>After adding some languages and translating or approving a few phrases, go back to the app and run the download task as \u003Ccode>npm run download\u003C\u002Fcode>. You should see the new languages to appear immediately in the \u003Ccode>locales\u003C\u002Fcode> folder. Note that only approved phrases or phrases translated directly by you – the owner will be downloaded.\u003C\u002Fp>\n\u003Cp>As an example, I’ve added French and Czech and translated them fully.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F8afdb567-5d0c-48ae-b88a-0a09e06b647b\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Next step to use the downloaded translations. Open the \u003Ccode>i18n.js\u003C\u002Fcode> file again and import the new files like the following. I’m importing the JSON directly, and then I’m adding it to the resources object. To try out your app in a different language, simply set  \u003Ccode>lng\u003C\u002Fcode>  property to  \u003Ccode>&quot;fr&quot;\u003C\u002Fcode> for example. You should see the translated message to appear in your app.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F i18n.js\nimport i18next from &quot;i18next&quot;;\nimport enJson from &quot;.\u002Flocales\u002Fen.json&quot;;\nimport frJson from &quot;.\u002Flocales\u002Ffr.json&quot;;\nimport csJson from &quot;.\u002Flocales\u002Fcs.json&quot;;\n\nexport const i18n = i18next;\n\nexport const initI18n = (callback) =&gt; {\n  i18next.init({\n    lng: &quot;en&quot;,\n    debug: true,\n    resources: {\n      en: {\n        translation: enJson,\n      },\n      fr: {\n        translation: frJson,\n      },\n      cs: {\n        translation: csJson,\n      },\n    },\n  }, function (err, t) {\n\t\u002F\u002F Call this function once i18next is initialized\n    callback()\n  });\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>We’ve just implemented the basic i18next functionality, and we’re able to translate our content. However, we don’t have an option to change the current language because it’s hardcoded. Let’s implement the language switcher as a next step.\u003C\u002Fp>\n\u003Ch2 id=\"implement-language-switcher\" id=\"implement-language-switcher\">Implement language switcher \u003Ca class=\"markdownit-header-anchor\" href=\"#implement-language-switcher\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Localazy CLI has an additional option called \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fmetadata-file\">metadata file\u003C\u002Fa>, which lets you retrieve current languages metadata directly from Localazy. This enables you to quickly implement language switcher, by knowing exactly which languages will be available and what are their full localized names and other properties. The language metadata file is available in JavaScript, Typescript or JSON file format. We will use the JavaScript version since it also contains plurals resolver, which we will use later.  Let’s configure it in the \u003Ccode>&quot;download&quot;\u003C\u002Fcode> section in \u003Ccode>localazy.json\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;download&quot;: {\n    &quot;files&quot;: &quot;src\u002Flocales\u002F${lang}.json&quot;,\n    &quot;metadataFileJs&quot;: &quot;src\u002Flocalazy-meta.js&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now run the \u003Ccode>npm run download\u003C\u002Fcode> command again, you should see a new \u003Ccode>localazy-meta.js\u003C\u002Fcode> file appear.  Let’s use the metadata file directly and add a few convenience methods to our \u003Ccode>i18n.js\u003C\u002Fcode> file for it.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">import i18next from &quot;i18next&quot;;\nimport LocalazyMeta from '.\u002Flocalazy-meta';\nimport enJson from &quot;.\u002Flocales\u002Fen.json&quot;;\nimport frJson from &quot;.\u002Flocales\u002Ffr.json&quot;;\nimport csJson from &quot;.\u002Flocales\u002Fcs.json&quot;;\n\nexport const i18n = i18next;\n\nexport const getSupportedLangCodes = () =&gt; {\n  return LocalazyMeta.languages.map(l =&gt; l.language)\n}\n\nexport const getBaseLanguage = () =&gt; {\n  return LocalazyMeta.baseLocale;\n}\n\nexport const getCurrentLanguage = () =&gt; {\n  return window.localStorage.i18nextLng || 'en';\n}\n\nexport const getLanguages = ()=&gt;{\n  return LocalazyMeta.languages;\n}\n\nexport const initI18n = (callback) =&gt; {\n  i18next.init({\n    lng: getBaseLanguage(),\n    fallbackLng: getBaseLanguage(),\n    debug: true,\n    supportedLngs: getSupportedLangCodes(),\n    resources: {\n      en: {\n        translation: enJson,\n      },\n      fr: {\n        translation: frJson,\n      },\n      cs: {\n        translation: csJson,\n      },\n    },\n  }, function (err, t) {\n    callback()\n  });\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>We will now create a really basic language switcher directly in our \u003Ccode>index.js\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">import { i18n, initI18n, getLanguages, getCurrentLanguage } from &quot;.\u002Fi18n&quot;;\n\nconst createLanguageSelector = () =&gt; {\n  let template = '&lt;select id=&quot;selector&quot;&gt;';\n  getLanguages().forEach(l =&gt; {\n    template += `\n    &lt;option ${l.language === getCurrentLanguage() ? &quot;selected&quot; : &quot;&quot;} value=&quot;${l.language}&quot;&gt;\n      ${l.localizedName}\n    &lt;\u002Foption&gt;`\n  })\n  template += '&lt;\u002Fselect&gt;';\n  return template;\n}\n\nconst getTranslatedContent = () =&gt; {\n  return i18n.t(&quot;hello_localazy&quot;);\n}\n\nconst updateTranslatedContent = () =&gt; {\n  document.querySelector(&quot;#content&quot;).innerHTML = getTranslatedContent();\n}\n\nconst initPageContent = () =&gt; {\n  document.querySelector(&quot;#app&quot;).innerHTML = `  \n  ${createLanguageSelector()}   \n  &lt;div id=&quot;content&quot;&gt;  \n    ${getTranslatedContent()}\n  &lt;\u002Fdiv&gt;`;\n\n  document.querySelector(&quot;#selector&quot;).addEventListener(&quot;change&quot;, (e) =&gt; {\n    i18n.changeLanguage(e.target.value);\n    updateTranslatedContent();\n  })\n}\n\ninitI18n(initPageContent);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>I’m also adding a few lines of CSS to the \u003Ccode>styles.css\u003C\u002Fcode> file. Just enough to make the page okay to look at, but you can embrace your creativity here.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-css\">#selector {\n  width: 150px;\n}\n#content {\n  margin-top: 1rem;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>That’s all needed for a language switcher. Your app should now look like the following.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Fb177b4cf-bfb1-449e-a497-cbd0141685b9\" alt=\"\">\u003C\u002Fp>\n\u003Ch2 id=\"add-plurals-support\" id=\"add-plurals-support\">Add plurals support \u003Ca class=\"markdownit-header-anchor\" href=\"#add-plurals-support\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Different languages come with various pluralization rules, and it’s one of the most challenging tasks to get right when localizing apps. Languages like French or English have more straightforward rules, a word can have either singular or plural form.  (also called as “one” and “other” ). This is not the case for Czech for example which has rules for “one” ,“few” and “other” quantities.  All possible forms for all common languages are well defined in the CLDR \u003Ca href=\"https:\u002F\u002Funicode-org.github.io\u002Fcldr-staging\u002Fcharts\u002F37\u002Fsupplemental\u002Flanguage_plural_rules.html\">Language Plural Rules\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>However, i18next supports plural rules for some languages, but unfortunately, it’s not the entire set. Moreover, i18next calls “one” form as “singular” which, in my opinion, creates confusion as it deviates from the CLDR standard.\nLuckily, Localazy covers the entire specification automatically in the language metadata file, where it returns correct plural rules for languages which are part of the specification.\u003C\u002Fp>\n\u003Cp>Let’s change some of our base phrases into plural forms in the \u003Ccode>en.json\u003C\u002Fcode> file. There are multiple ways of defining plurals in JSON. We will use an object notation, but you can read about all other options here: \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fjson-format#plurals\">File Format - JSON\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;hello_localazy&quot;: &quot;Hello Localazy!&quot;,\n  &quot;calendar&quot;: {\n    &quot;one&quot;: &quot;Calendar&quot;,\n    &quot;other&quot;: &quot;Calendars&quot;\n  },\n  &quot;field&quot;: {\n    &quot;one&quot;: &quot;Field&quot;,\n    &quot;other&quot;: &quot;Fields&quot;\n  },\n  &quot;title&quot;: {\n    &quot;one&quot;: &quot;Title&quot;,\n    &quot;other&quot;: &quot;Titles&quot;\n  },\n  &quot;event&quot;: {\n    &quot;one&quot;: &quot;Event&quot;,\n    &quot;other&quot;: &quot;Events&quot;\n  },\n  &quot;color&quot;: {\n    &quot;one&quot;: &quot;Color&quot;,\n    &quot;other&quot;: &quot;Colors&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To enable that feature in the CLI, we need to also add  \u003Ccode>plural_object\u003C\u002Fcode> in the \u003Ccode>&quot;upload&quot;\u003C\u002Fcode> section of our \u003Ccode>localazy.json\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;upload&quot;: {  \n    &quot;type&quot;: &quot;json&quot;,\n    &quot;features&quot;: [&quot;plural_object&quot;],\n    &quot;files&quot;: &quot;src\u002Flocales\u002Fen.json&quot;    \n  },\n  &quot;download&quot;: {\n    &quot;files&quot;: &quot;src\u002Flocales\u002F${lang}.json&quot;,\n    &quot;metadataFileJs&quot;: &quot;src\u002Flocalazy-meta.js&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now, try to run the \u003Ccode>npm run upload\u003C\u002Fcode> task again and go to the Localazy web interface. If you now try to translate\u003Cbr>\nsome of the new phrases, you should see that all plurals are displayed in a slightly different interface, which accommodates according to each language plural rules as per the CLDR specification.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Fe4334b6c-cb33-448a-b88d-169566812002\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Try to add some example translations for the phrases and run \u003Ccode>npm run download\u003C\u002Fcode> task again.\nWe will now add a plural helper into \u003Ccode>i18n.js\u003C\u002Fcode> file, which will resolve correct plural form for each language as defined in Localazy.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F i18n.js\n\u002F\u002F...\nexport const getKeyPlural = (key, count) =&gt; {    \n  const currentLanguage = LocalazyMeta.languages.find(l =&gt; l.language === i18next.language);\n  const pluralType = currentLanguage.pluralType(+count);\n  return `${key}.${pluralType}`;\n}\n\u002F\u002F...\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then we will update the \u003Ccode>getTranslatedContent\u003C\u002Fcode> function in  \u003Ccode>index.js\u003C\u002Fcode> file to resolve our pluralized content. You can tweak the count variable to display different plural forms.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F index.js\nimport { i18n, initI18n, getLanguages, getCurrentLanguage, getKeyPlural as p } from &quot;.\u002Fi18n&quot;;\nlet count = 0;\n\u002F\u002F...\nconst getTranslatedContent = () =&gt; {\n  return `${i18n.t(&quot;hello_localazy&quot;)}&lt;br&gt;&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;calendar&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;field&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;event&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;title&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;color&quot;, count))}`;\n}\n\u002F\u002F..\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To improve the example a little bit, we will add a number input and update the count variable according to the input value, so we can test the functionality based on our input.  Here’s the final \u003Ccode>index.js\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">import { i18n, initI18n, getLanguages, getCurrentLanguage, getKeyPlural as p } from &quot;.\u002Fi18n&quot;;\nlet count = 0;\n\nconst createLanguageSelector = () =&gt; {\n  let template = '&lt;select id=&quot;selector&quot;&gt;';\n  getLanguages().forEach(l =&gt; {\n    template += `\n    &lt;option ${l.language === getCurrentLanguage() ? &quot;selected&quot; : &quot;&quot;} value=&quot;${l.language}&quot;&gt;\n      ${l.localizedName}\n    &lt;\u002Foption&gt;`\n  })\n  template += '&lt;\u002Fselect&gt;';\n  return template;\n}\n\nconst getTranslatedContent = () =&gt; {\n  return `${i18n.t(&quot;hello_localazy&quot;)}&lt;br&gt;&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;calendar&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;field&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;event&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;title&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;color&quot;, count))}`;\n}\n\nconst updateTranslatedContent = () =&gt; {\n  document.querySelector(&quot;#content&quot;).innerHTML = getTranslatedContent();\n}\n\nconst initPageContent = () =&gt; {\n  document.querySelector(&quot;#app&quot;).innerHTML = `  \n  ${createLanguageSelector()}   \n  &lt;input id=&quot;count&quot; type=&quot;number&quot; placeholder=&quot;count&quot; value=&quot;${count}&quot; min=&quot;0&quot;\u002F&gt;\n  &lt;div id=&quot;content&quot;&gt;  \n    ${getTranslatedContent()}\n  &lt;\u002Fdiv&gt;`;\n\n  document.querySelector(&quot;#selector&quot;).addEventListener(&quot;change&quot;, (e) =&gt; {\n    i18n.changeLanguage(e.target.value);\n    updateTranslatedContent();\n  })\n\n  document.querySelector(&quot;#count&quot;).addEventListener(&quot;input&quot;, (e) =&gt; {\n    if (e.target.value) {\n      count = e.target.value;\n      updateTranslatedContent();\n    }\n  })\n}\n\ninitI18n(initPageContent);\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And the final example will look like following. Changing the number should correctly update the plural form.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F2cd08640-6484-4323-be9c-427b404f943c\" alt=\"\">\u003C\u002Fp>\n\u003Ch2 id=\"closing-words\" id=\"closing-words\">Closing words \u003Ca class=\"markdownit-header-anchor\" href=\"#closing-words\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>I hope you’ve enjoyed this sneak peek on what Localazy can do for you and understood how easy it is to start localizing any JavaScript app with it.  If you would like to play around with the prototype, you can check it out on \u003Ca href=\"https:\u002F\u002Fcodesandbox.io\u002Fs\u002Flocalazy-javascript-i18n-example-imskh?file=\u002Fsrc\u002Fi18n.js\">CodeSandbox\u003C\u002Fa>. The whole git repository is available on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flocalazy\u002Fjavascript-i18next-example\">GitHub\u003C\u002Fa>. If you have any questions, just join us on our \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FsQucDznuMp\">Discord\u003C\u002Fa> for a chat.\u003C\u002Fp>\n\u003C!--kg-card-end: html-->\u003C!--kg-card-begin: html-->\u003Cdiv class=\"markdown-it-vue-alter markdown-it-vue-alter-info\">\u003Ci class=\"markdown-it-vue-alert-icon markdown-it-vue-alert-icon-info\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"64 64 896 896\" data-icon=\"info-circle\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\" class=\"\">\u003Cpath d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z\">\u003C\u002Fpath>\u003C\u002Fsvg>\u003C\u002Fi>\u003Cp>Some parts of this article might not be accurate. This article mentions the ShareTM feature, which we've updated later. Learn more about the \u003Ca href=\"\u002Fblog\u002Ffeature-update-sharetm-improvements\">Localazy ShareTM improvements in this article\u003C\u002Fa>.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C!--kg-card-end: html-->",{"id":4,"status":5,"created_on":1944,"modified_on":1945,"icon":1946,"header":1947,"description":1948,"button_label":1949,"link":1950},"2022-03-17T12:23:03.000Z","2024-04-11T11:09:17.000Z","member","Join Localazy today 💙","Translating has never been easier. Try Localazy for free with a 14-day trial.","Sign up","register",{"slug":1865,"id":1858,"uuid":1952,"title":1864,"html":1953,"comment_id":1954,"feature_image":1868,"featured":160,"visibility":1955,"email_recipient_filter":1956,"created_at":1867,"updated_at":1866,"published_at":1867,"custom_excerpt":1941,"codeinjection_head":1957,"codeinjection_foot":10,"custom_template":1954,"canonical_url":10,"authors":1958,"tags":1965,"primary_author":2014,"primary_tag":2015,"url":2016,"excerpt":1941,"reading_time":19,"access":162,"send_email_when_published":160,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"email_subject":10,"frontmatter":10,"dictionary":1877,"cta":1943,"plainTags":1869},"ba276d30-50fe-4917-99d6-d251bb2c8f2a","\u003C!--kg-card-begin: html-->\u003Cp>We won’t use any JavaScript framework only to stay focused on the sole purpose of this article. All code examples are supposed to demonstrate the general concept, so feel free to take any part of them and adapt it to your own app’s specific needs.\u003C\u002Fp>\n\u003Ch2 id=\"why-localazy-and-i18next\" id=\"why-localazy-and-i18next\">Why Localazy and i18next? \u003Ca class=\"markdownit-header-anchor\" href=\"#why-localazy-and-i18next\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Localazy is a developer-focused localization management platform that supports a wide variety of frameworks and an even more comprehensive range of formats through its CLI. Localazy’s best features are a pro-active review process, highly accurate translation memory supported by community-shared translations, and a simple, crystal clear UI which is not bloated with rarely used options.\u003C\u002Fp>\n\u003Cp>As we’ll show shortly, it works seamlessly with \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdictionary\u002Fi18next\">i18next library\u003C\u002Fa>, which is one of the most popular choices when it comes to internationalization in JavaScript apps. Thanks to that, managing translations in professional teams or even in open-source projects where anybody can contribute is a piece of cake 🍰.\u003C\u002Fp>\n\u003Ch2 id=\"create-a-new-project\" id=\"create-a-new-project\">Create a new project \u003Ca class=\"markdownit-header-anchor\" href=\"#create-a-new-project\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Let’s start with an empty project. We will use \u003Ccode>npm\u003C\u002Fcode> to manage dependencies, so make sure you have \u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002F\">Node.js\u003C\u002Fa> installed. You can verify the installation by running \u003Ccode>npm -v\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">mkdir localize-js-app &amp;&amp; cd localize-js-app &amp;&amp; npm init\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>After running the above command and answering the initial questions, a \u003Ccode>package.json\u003C\u002Fcode> file should be created. Let’s complete our empty project structure to look like the tree below. These should be all the files we’ll need initially.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">.\n├── index.html\n├── package.json\n├── src\n│   ├── i18n.js\n│   └── index.js\n└── style.css\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Paste the following content into your \u003Ccode>index.html\u003C\u002Fcode> file. This will be our app index, and we’re not going to touch it anymore, since we’re going to create all content dynamically with JavaScript.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n  &lt;title&gt;Localize Javascript App with Localazy&lt;\u002Ftitle&gt;\n  &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot;\u002F&gt;\n  &lt;meta charset=&quot;UTF-8&quot; \u002F&gt;\n&lt;\u002Fhead&gt;\n&lt;body&gt;\n  &lt;div id=&quot;app&quot;&gt;&lt;\u002Fdiv&gt;\n  &lt;script src=&quot;src\u002Findex.js&quot;&gt;\n  &lt;\u002Fscript&gt;\n&lt;\u002Fbody&gt;\n&lt;\u002Fhtml&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To work with the project more conveniently, let’s install \u003Ccode>parcel-bundler\u003C\u002Fcode>  first.\nIf you don’t know \u003Ca href=\"https:\u002F\u002Fparceljs.org\u002Fgetting_started.html\">Parcel\u003C\u002Fa> yet, it’s a web application bundler, with a great developer experience. It offers blazing-fast performance and requires zero configuration. So basically with one package installed, you’ll get a development server with hot-reloading and production builds. Excellent for quick projects and rapid prototyping.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install -D parcel-bundler\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can then simplify running the Parcel bundler by adding a \u003Cem>run\u003C\u002Fem> and \u003Cem>build\u003C\u002Fem> task to the scripts section in your \u003Ccode>package.json\u003C\u002Fcode>. Once done, try to run the development server with  \u003Ccode>npm start\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;scripts&quot;: {\n    &quot;start&quot;: &quot;parcel index.html --open&quot;,\n    &quot;build&quot;: &quot;parcel build index.html&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"add-source-language\" id=\"add-source-language\">Add source language \u003Ca class=\"markdownit-header-anchor\" href=\"#add-source-language\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Create new \u003Ccode>src\u002Flocales\u003C\u002Fcode> folder next to our \u003Ccode>index.js\u003C\u002Fcode> file and put an \u003Ccode>en.json\u003C\u002Fcode> file inside it. This will be our base language for the app.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">.\n├── index.html\n├── package.json\n├── src\n│   ├── i18n.js\n│   ├── index.js\n│   └── locales\n│       └── en.json\n└── style.css\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Let’s add a couple of simple translatable strings in English.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;hello_localazy&quot;: &quot;Hello Localazy!&quot;,\n  &quot;calendar&quot;: &quot;Calendar&quot;,\n  &quot;field&quot;: &quot;Field&quot;,\n  &quot;event&quot;: &quot;Event&quot;,\n  &quot;title&quot;: &quot;Title&quot;,\n  &quot;color&quot;: &quot;Color&quot;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>As a next step, we’re going to install the \u003Ccode>i18next\u003C\u002Fcode> library.  It will help us to quickly load all the locales we have,   get our content translated by some convinient methods it provides and eventually to implement a custom language switcher. We will get to it shortly.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install i18next\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To test that the library works for us, we need to import the base strings and initialize the \u003Ccode>i18next\u003C\u002Fcode> object.\nAdd the following content to the \u003Ccode>i18n.js\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F i18n.js\nimport i18next from &quot;i18next&quot;;\nimport enJson from &quot;.\u002Flocales\u002Fen.json&quot;;\n\nexport const i18n = i18next;\n\nexport const initI18n = (callback) =&gt; {\n  i18next.init({\n    lng: &quot;en&quot;,\n    debug: true,\n    resources: {\n      en: {\n        translation: enJson,\n      },\n    },\n  }, function (err, t) {\n    \u002F\u002F Call this function once i18next is initialized\n    callback()\n  });\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And run the initializer in \u003Ccode>index.js\u003C\u002Fcode>.  We pass the \u003Ccode>createPageContent\u003C\u002Fcode> function as a callback when the initialization finishes. To test that the translations are loaded correctly, we simply set some text to the \u003Ccode>#app\u003C\u002Fcode>  content. Note that this is not an optimal approach and might get unmaintainable in bigger projects, but it should serve well for our demonstrating purposes.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F index.js\nimport { i18n, initI18n } from &quot;.\u002Fi18n&quot;;\n\nconst createPageContent = () =&gt; {\n  document.querySelector(&quot;#app&quot;).innerHTML = i18n.t(&quot;hello_localazy&quot;);\n}\ninitI18n(createPageContent);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Going back to the browser while having the server running, you should see the \u003Ccode>Hello Localazy!\u003C\u002Fcode> greeting to appear. Awesome, we have the basic setup working, but let’s get the phrases translated now.\nNow, that’s where the fun begins. In real-life projects, we don’t want to handle translations in JSON manually, it’s usually very tedious and error-prone. Also, we need some sort of a quality control mechanism, to ensure that the translations meet the required standards. With Localazy you get all of this plus automated translations as a bonus.\u003C\u002Fp>\n\u003Ch2 id=\"integrate-with-localazy\" id=\"integrate-with-localazy\">Integrate with Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#integrate-with-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Go to \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fregister\">Localazy signup\u003C\u002Fa> and create an account, then create a new app. I’m leaving it public, this way other people can freely contribute with their translations. Source language is English, and community translations enabled. They will help us to translate some parts of the app automatically.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F13a7ec4a-5103-4524-b16d-bc8032c2b616\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Now in your app, from the available integrations select JavaScript.  The setup steps you see there is a general-purpose quick start, but I’ll give you more precise instructions here, so read on. The only thing needed is to note down the \u003Ccode>readKey\u003C\u002Fcode> and \u003Ccode>writeKey\u003C\u002Fcode>, we will need them in a moment.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F27c90278-0f8f-4b20-9aba-dc4b576d83d7\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Now we need to configure our app to synchronize strings with Localazy. Go back to your app’s terminal and install \u003Ca href=\"https:\u002F\u002Ftesting.localazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">Localazy CLI\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install -D @localazy\u002Fcli\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then create a new file called \u003Ccode>localazy.json\u003C\u002Fcode> in your project root, paste the following content. This is a configuration for the CLI we’ve just installed.  Don’t forget to fill in the keys, you’ve noted earlier. If you would like to better understand the used configuration, go to the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">Localazy CLI\u003C\u002Fa> documentation, where you’ll find all the necessary details.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">\u002F\u002F localazy.json\n{\n  &quot;writeKey&quot;: &quot;&lt;your-write-key&gt;&quot;,\n  &quot;readKey&quot;: &quot;&lt;your-read-key&gt;&quot;, \n  &quot;upload&quot;: {  \n    &quot;type&quot;: &quot;json&quot;,\n    &quot;files&quot;: &quot;src\u002Flocales\u002Fen.json&quot;         \n  },\n  &quot;download&quot;: {\n    &quot;files&quot;: &quot;src\u002Flocales\u002F${lang}.json&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>In \u003Ccode>package.json\u003C\u002Fcode>  add  \u003Ccode>upload\u003C\u002Fcode> and \u003Ccode>download\u003C\u002Fcode> tasks to the \u003Ccode>&quot;scripts&quot;\u003C\u002Fcode> section, right after the parcel commands. You can also add a \u003Ccode>list\u003C\u002Fcode>  task, to check what files are available on the platform, but we won’t need it in this article specifically.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;scripts&quot;: {\n    &quot;start&quot;: &quot;parcel index.html --open&quot;,\n    &quot;build&quot;: &quot;parcel build index.html&quot;,\n    &quot;upload&quot;: &quot;localazy upload&quot;,\n    &quot;download&quot;: &quot;localazy download&quot;,\n    &quot;list&quot;: &quot;localazy list&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If set up correctly, you should be able to run \u003Ccode>npm run upload\u003C\u002Fcode> to upload strings. Note that you can always run the tasks with the \u003Ccode>-s\u003C\u002Fcode> option to simulate the action and verify that everything is configured correctly. No files will be uploaded or written then.\u003C\u002Fp>\n\u003Cp>Now go back to your app at Localazy, you should see our base language (English) to appear.  If successful, try to add some new language. Some of the languages might be already translated by ShareTM technology.  Adding one of these languages will show you a review button, where you can approve the suggested phrases. If you add language without suggestions, you can start translating immediately with the help of classic machine translations.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Fa4fec7c4-9b9a-4427-9a31-2f715d7fca9a\" alt=\"\">\u003C\u002Fp>\n\u003Cp>After adding some languages and translating or approving a few phrases, go back to the app and run the download task as \u003Ccode>npm run download\u003C\u002Fcode>. You should see the new languages to appear immediately in the \u003Ccode>locales\u003C\u002Fcode> folder. Note that only approved phrases or phrases translated directly by you – the owner will be downloaded.\u003C\u002Fp>\n\u003Cp>As an example, I’ve added French and Czech and translated them fully.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F8afdb567-5d0c-48ae-b88a-0a09e06b647b\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Next step to use the downloaded translations. Open the \u003Ccode>i18n.js\u003C\u002Fcode> file again and import the new files like the following. I’m importing the JSON directly, and then I’m adding it to the resources object. To try out your app in a different language, simply set  \u003Ccode>lng\u003C\u002Fcode>  property to  \u003Ccode>&quot;fr&quot;\u003C\u002Fcode> for example. You should see the translated message to appear in your app.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F i18n.js\nimport i18next from &quot;i18next&quot;;\nimport enJson from &quot;.\u002Flocales\u002Fen.json&quot;;\nimport frJson from &quot;.\u002Flocales\u002Ffr.json&quot;;\nimport csJson from &quot;.\u002Flocales\u002Fcs.json&quot;;\n\nexport const i18n = i18next;\n\nexport const initI18n = (callback) =&gt; {\n  i18next.init({\n    lng: &quot;en&quot;,\n    debug: true,\n    resources: {\n      en: {\n        translation: enJson,\n      },\n      fr: {\n        translation: frJson,\n      },\n      cs: {\n        translation: csJson,\n      },\n    },\n  }, function (err, t) {\n\t\u002F\u002F Call this function once i18next is initialized\n    callback()\n  });\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>We’ve just implemented the basic i18next functionality, and we’re able to translate our content. However, we don’t have an option to change the current language because it’s hardcoded. Let’s implement the language switcher as a next step.\u003C\u002Fp>\n\u003Ch2 id=\"implement-language-switcher\" id=\"implement-language-switcher\">Implement language switcher \u003Ca class=\"markdownit-header-anchor\" href=\"#implement-language-switcher\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Localazy CLI has an additional option called \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fmetadata-file\">metadata file\u003C\u002Fa>, which lets you retrieve current languages metadata directly from Localazy. This enables you to quickly implement language switcher, by knowing exactly which languages will be available and what are their full localized names and other properties. The language metadata file is available in JavaScript, Typescript or JSON file format. We will use the JavaScript version since it also contains plurals resolver, which we will use later.  Let’s configure it in the \u003Ccode>&quot;download&quot;\u003C\u002Fcode> section in \u003Ccode>localazy.json\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;download&quot;: {\n    &quot;files&quot;: &quot;src\u002Flocales\u002F${lang}.json&quot;,\n    &quot;metadataFileJs&quot;: &quot;src\u002Flocalazy-meta.js&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now run the \u003Ccode>npm run download\u003C\u002Fcode> command again, you should see a new \u003Ccode>localazy-meta.js\u003C\u002Fcode> file appear.  Let’s use the metadata file directly and add a few convenience methods to our \u003Ccode>i18n.js\u003C\u002Fcode> file for it.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">import i18next from &quot;i18next&quot;;\nimport LocalazyMeta from '.\u002Flocalazy-meta';\nimport enJson from &quot;.\u002Flocales\u002Fen.json&quot;;\nimport frJson from &quot;.\u002Flocales\u002Ffr.json&quot;;\nimport csJson from &quot;.\u002Flocales\u002Fcs.json&quot;;\n\nexport const i18n = i18next;\n\nexport const getSupportedLangCodes = () =&gt; {\n  return LocalazyMeta.languages.map(l =&gt; l.language)\n}\n\nexport const getBaseLanguage = () =&gt; {\n  return LocalazyMeta.baseLocale;\n}\n\nexport const getCurrentLanguage = () =&gt; {\n  return window.localStorage.i18nextLng || 'en';\n}\n\nexport const getLanguages = ()=&gt;{\n  return LocalazyMeta.languages;\n}\n\nexport const initI18n = (callback) =&gt; {\n  i18next.init({\n    lng: getBaseLanguage(),\n    fallbackLng: getBaseLanguage(),\n    debug: true,\n    supportedLngs: getSupportedLangCodes(),\n    resources: {\n      en: {\n        translation: enJson,\n      },\n      fr: {\n        translation: frJson,\n      },\n      cs: {\n        translation: csJson,\n      },\n    },\n  }, function (err, t) {\n    callback()\n  });\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>We will now create a really basic language switcher directly in our \u003Ccode>index.js\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">import { i18n, initI18n, getLanguages, getCurrentLanguage } from &quot;.\u002Fi18n&quot;;\n\nconst createLanguageSelector = () =&gt; {\n  let template = '&lt;select id=&quot;selector&quot;&gt;';\n  getLanguages().forEach(l =&gt; {\n    template += `\n    &lt;option ${l.language === getCurrentLanguage() ? &quot;selected&quot; : &quot;&quot;} value=&quot;${l.language}&quot;&gt;\n      ${l.localizedName}\n    &lt;\u002Foption&gt;`\n  })\n  template += '&lt;\u002Fselect&gt;';\n  return template;\n}\n\nconst getTranslatedContent = () =&gt; {\n  return i18n.t(&quot;hello_localazy&quot;);\n}\n\nconst updateTranslatedContent = () =&gt; {\n  document.querySelector(&quot;#content&quot;).innerHTML = getTranslatedContent();\n}\n\nconst initPageContent = () =&gt; {\n  document.querySelector(&quot;#app&quot;).innerHTML = `  \n  ${createLanguageSelector()}   \n  &lt;div id=&quot;content&quot;&gt;  \n    ${getTranslatedContent()}\n  &lt;\u002Fdiv&gt;`;\n\n  document.querySelector(&quot;#selector&quot;).addEventListener(&quot;change&quot;, (e) =&gt; {\n    i18n.changeLanguage(e.target.value);\n    updateTranslatedContent();\n  })\n}\n\ninitI18n(initPageContent);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>I’m also adding a few lines of CSS to the \u003Ccode>styles.css\u003C\u002Fcode> file. Just enough to make the page okay to look at, but you can embrace your creativity here.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-css\">#selector {\n  width: 150px;\n}\n#content {\n  margin-top: 1rem;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>That’s all needed for a language switcher. Your app should now look like the following.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Fb177b4cf-bfb1-449e-a497-cbd0141685b9\" alt=\"\">\u003C\u002Fp>\n\u003Ch2 id=\"add-plurals-support\" id=\"add-plurals-support\">Add plurals support \u003Ca class=\"markdownit-header-anchor\" href=\"#add-plurals-support\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Different languages come with various pluralization rules, and it’s one of the most challenging tasks to get right when localizing apps. Languages like French or English have more straightforward rules, a word can have either singular or plural form.  (also called as “one” and “other” ). This is not the case for Czech for example which has rules for “one” ,“few” and “other” quantities.  All possible forms for all common languages are well defined in the CLDR \u003Ca href=\"https:\u002F\u002Funicode-org.github.io\u002Fcldr-staging\u002Fcharts\u002F37\u002Fsupplemental\u002Flanguage_plural_rules.html\">Language Plural Rules\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>However, i18next supports plural rules for some languages, but unfortunately, it’s not the entire set. Moreover, i18next calls “one” form as “singular” which, in my opinion, creates confusion as it deviates from the CLDR standard.\nLuckily, Localazy covers the entire specification automatically in the language metadata file, where it returns correct plural rules for languages which are part of the specification.\u003C\u002Fp>\n\u003Cp>Let’s change some of our base phrases into plural forms in the \u003Ccode>en.json\u003C\u002Fcode> file. There are multiple ways of defining plurals in JSON. We will use an object notation, but you can read about all other options here: \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fjson-format#plurals\">File Format - JSON\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;hello_localazy&quot;: &quot;Hello Localazy!&quot;,\n  &quot;calendar&quot;: {\n    &quot;one&quot;: &quot;Calendar&quot;,\n    &quot;other&quot;: &quot;Calendars&quot;\n  },\n  &quot;field&quot;: {\n    &quot;one&quot;: &quot;Field&quot;,\n    &quot;other&quot;: &quot;Fields&quot;\n  },\n  &quot;title&quot;: {\n    &quot;one&quot;: &quot;Title&quot;,\n    &quot;other&quot;: &quot;Titles&quot;\n  },\n  &quot;event&quot;: {\n    &quot;one&quot;: &quot;Event&quot;,\n    &quot;other&quot;: &quot;Events&quot;\n  },\n  &quot;color&quot;: {\n    &quot;one&quot;: &quot;Color&quot;,\n    &quot;other&quot;: &quot;Colors&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To enable that feature in the CLI, we need to also add  \u003Ccode>plural_object\u003C\u002Fcode> in the \u003Ccode>&quot;upload&quot;\u003C\u002Fcode> section of our \u003Ccode>localazy.json\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;upload&quot;: {  \n    &quot;type&quot;: &quot;json&quot;,\n    &quot;features&quot;: [&quot;plural_object&quot;],\n    &quot;files&quot;: &quot;src\u002Flocales\u002Fen.json&quot;    \n  },\n  &quot;download&quot;: {\n    &quot;files&quot;: &quot;src\u002Flocales\u002F${lang}.json&quot;,\n    &quot;metadataFileJs&quot;: &quot;src\u002Flocalazy-meta.js&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now, try to run the \u003Ccode>npm run upload\u003C\u002Fcode> task again and go to the Localazy web interface. If you now try to translate\u003Cbr>\nsome of the new phrases, you should see that all plurals are displayed in a slightly different interface, which accommodates according to each language plural rules as per the CLDR specification.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Fe4334b6c-cb33-448a-b88d-169566812002\" alt=\"\">\u003C\u002Fp>\n\u003Cp>Try to add some example translations for the phrases and run \u003Ccode>npm run download\u003C\u002Fcode> task again.\nWe will now add a plural helper into \u003Ccode>i18n.js\u003C\u002Fcode> file, which will resolve correct plural form for each language as defined in Localazy.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F i18n.js\n\u002F\u002F...\nexport const getKeyPlural = (key, count) =&gt; {    \n  const currentLanguage = LocalazyMeta.languages.find(l =&gt; l.language === i18next.language);\n  const pluralType = currentLanguage.pluralType(+count);\n  return `${key}.${pluralType}`;\n}\n\u002F\u002F...\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then we will update the \u003Ccode>getTranslatedContent\u003C\u002Fcode> function in  \u003Ccode>index.js\u003C\u002Fcode> file to resolve our pluralized content. You can tweak the count variable to display different plural forms.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">\u002F\u002F index.js\nimport { i18n, initI18n, getLanguages, getCurrentLanguage, getKeyPlural as p } from &quot;.\u002Fi18n&quot;;\nlet count = 0;\n\u002F\u002F...\nconst getTranslatedContent = () =&gt; {\n  return `${i18n.t(&quot;hello_localazy&quot;)}&lt;br&gt;&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;calendar&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;field&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;event&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;title&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;color&quot;, count))}`;\n}\n\u002F\u002F..\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To improve the example a little bit, we will add a number input and update the count variable according to the input value, so we can test the functionality based on our input.  Here’s the final \u003Ccode>index.js\u003C\u002Fcode> file.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-js\">import { i18n, initI18n, getLanguages, getCurrentLanguage, getKeyPlural as p } from &quot;.\u002Fi18n&quot;;\nlet count = 0;\n\nconst createLanguageSelector = () =&gt; {\n  let template = '&lt;select id=&quot;selector&quot;&gt;';\n  getLanguages().forEach(l =&gt; {\n    template += `\n    &lt;option ${l.language === getCurrentLanguage() ? &quot;selected&quot; : &quot;&quot;} value=&quot;${l.language}&quot;&gt;\n      ${l.localizedName}\n    &lt;\u002Foption&gt;`\n  })\n  template += '&lt;\u002Fselect&gt;';\n  return template;\n}\n\nconst getTranslatedContent = () =&gt; {\n  return `${i18n.t(&quot;hello_localazy&quot;)}&lt;br&gt;&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;calendar&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;field&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;event&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;title&quot;, count))}&lt;br&gt;\n          ${count}  ${i18n.t(p(&quot;color&quot;, count))}`;\n}\n\nconst updateTranslatedContent = () =&gt; {\n  document.querySelector(&quot;#content&quot;).innerHTML = getTranslatedContent();\n}\n\nconst initPageContent = () =&gt; {\n  document.querySelector(&quot;#app&quot;).innerHTML = `  \n  ${createLanguageSelector()}   \n  &lt;input id=&quot;count&quot; type=&quot;number&quot; placeholder=&quot;count&quot; value=&quot;${count}&quot; min=&quot;0&quot;\u002F&gt;\n  &lt;div id=&quot;content&quot;&gt;  \n    ${getTranslatedContent()}\n  &lt;\u002Fdiv&gt;`;\n\n  document.querySelector(&quot;#selector&quot;).addEventListener(&quot;change&quot;, (e) =&gt; {\n    i18n.changeLanguage(e.target.value);\n    updateTranslatedContent();\n  })\n\n  document.querySelector(&quot;#count&quot;).addEventListener(&quot;input&quot;, (e) =&gt; {\n    if (e.target.value) {\n      count = e.target.value;\n      updateTranslatedContent();\n    }\n  })\n}\n\ninitI18n(initPageContent);\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And the final example will look like following. Changing the number should correctly update the plural form.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002F2cd08640-6484-4323-be9c-427b404f943c\" alt=\"\">\u003C\u002Fp>\n\u003Ch2 id=\"closing-words\" id=\"closing-words\">Closing words \u003Ca class=\"markdownit-header-anchor\" href=\"#closing-words\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>I hope you’ve enjoyed this sneak peek on what Localazy can do for you and understood how easy it is to start localizing any JavaScript app with it.  If you would like to play around with the prototype, you can check it out on \u003Ca href=\"https:\u002F\u002Fcodesandbox.io\u002Fs\u002Flocalazy-javascript-i18n-example-imskh?file=\u002Fsrc\u002Fi18n.js\">CodeSandbox\u003C\u002Fa>. The whole git repository is available on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flocalazy\u002Fjavascript-i18next-example\">GitHub\u003C\u002Fa>. If you have any questions, just join us on our \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FsQucDznuMp\">Discord\u003C\u002Fa> for a chat.\u003C\u002Fp>\n\u003C!--kg-card-end: html-->\u003C!--kg-card-begin: html-->\u003Cdiv class=\"markdown-it-vue-alter markdown-it-vue-alter-info\">\u003Ci class=\"markdown-it-vue-alert-icon markdown-it-vue-alert-icon-info\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"64 64 896 896\" data-icon=\"info-circle\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\" class=\"\">\u003Cpath d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z\">\u003C\u002Fpath>\u003C\u002Fsvg>\u003C\u002Fi>\u003Cp>Some parts of this article might not be accurate. This article mentions the ShareTM feature, which we've updated later. Learn more about the \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fblog\u002Ffeature-update-sharetm-improvements\">Localazy ShareTM improvements in this article\u003C\u002Fa>.\u003C\u002Fp>\n\u003C\u002Fdiv>\u003C!--kg-card-end: html-->","63","public","none","{\"intercomArticleUrl\":\"\"}",[1959],{"id":1860,"name":1861,"slug":1862,"profile_image":1863,"cover_image":10,"bio":1960,"website":1961,"location":1962,"facebook":10,"twitter":1963,"meta_title":10,"meta_description":10,"url":1964},"I'm Jan, PM @Localazy. I enjoy getting things done with a passion and an eye for detail. My mission is to listen, learn, and then create an outstanding product our users will love.","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fxbilek18\u002F","Katowice, Poland","@honzabilek4","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Fjan-bilek\u002F",[1966,1971,1974,1977,1980,1985,1991,1996,2001,2006,2009],{"id":1967,"name":1968,"slug":1969,"description":1948,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1970},"60a37fc7cf7b6a0001d1f10f","[CTA] Join Localazy today 💙","cta-1","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-1\u002F",{"id":1972,"name":759,"slug":540,"description":759,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1973},"60a37fc7cf7b6a0001d1f0e8","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcli\u002F",{"id":1975,"name":641,"slug":640,"description":641,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1976},"60a37fc7cf7b6a0001d1f105","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fjavascript\u002F",{"id":1978,"name":1873,"slug":1874,"description":1873,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1979},"60a37fc7cf7b6a0001d1f0fa","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fhowto\u002F",{"id":1981,"name":1982,"slug":1983,"description":1882,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1984},"60a37fc7cf7b6a0001d1f168","[DICT] JavaScript","term-75","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-75\u002F",{"id":1986,"name":1987,"slug":1988,"description":1989,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1990},"60a37fc7cf7b6a0001d1f11f","[DICT] Localization","term-2","Localization is a process of preparing a product for a particular market.","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-2\u002F",{"id":1992,"name":1993,"slug":1994,"description":1915,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1995},"60a37fc7cf7b6a0001d1f16c","[DICT] Internationalization (i18n)","term-79","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-79\u002F",{"id":1997,"name":1998,"slug":1999,"description":1925,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2000},"60a37fc7cf7b6a0001d1f175","[DICT] i18next","term-88","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-88\u002F",{"id":2002,"name":2003,"slug":2004,"description":10,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2005},"60fffb486f8ebe0001bd8ddd","[COMSHARE]","comshare","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcomshare\u002F",{"id":2007,"name":1876,"slug":1876,"description":10,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2008},"60f567ab6f8ebe0001bd80ec","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fi18n\u002F",{"id":2010,"name":2011,"slug":2012,"description":10,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2013},"64710a2f047091000193ca3d","[INTERCOM]","intercom","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fintercom\u002F",{"id":1860,"name":1861,"slug":1862,"profile_image":1863,"cover_image":10,"bio":1960,"website":1961,"location":1962,"facebook":10,"twitter":1963,"meta_title":10,"meta_description":10,"url":1964},{"id":1967,"name":1968,"slug":1969,"description":1948,"feature_image":10,"visibility":1955,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":1970},"https:\u002F\u002Fghost.localazy.com\u002Fjavascript-app-localization-i18next-localazy\u002F",[2018,2040,2060],{"id":2019,"owner":2020,"created_by":10,"sort":10,"title":2025,"slug":2026,"modified_on":877,"created_on":2027,"pinned":160,"badge":10,"priority":1824,"main_image":2028,"status":5,"tags":2029,"dictionary":2039,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"6372308e04709100019374c9",{"id":2021,"first_name":2022,"last_name":877,"slug":2023,"avatar":2024},"6061ffdd2a37af00016d413d","Daniel Charvát","daniel-charvat","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fdan-1.png","Figma in Localization: Figma as a Source of Truth","figma-series-figma-as-source-of-truth","2023-02-08T20:43:55.000+01:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F01\u002FFigma-Series-3.png",[2030,2032,2033,2036],{"id":2031,"created_on":1828,"status":5,"label":671,"slug":670,"on_index_page":162},6183,{"id":451,"created_on":1828,"status":5,"label":1873,"slug":1874,"on_index_page":160},{"id":451,"created_on":1828,"status":5,"label":2034,"slug":2035,"on_index_page":162},"DevTips","devtips",{"id":411,"created_on":1828,"status":5,"label":2037,"slug":2038,"on_index_page":160},"Design","design",[],{"id":2041,"owner":2042,"created_by":10,"sort":10,"title":2047,"slug":2048,"modified_on":877,"created_on":2049,"pinned":160,"badge":10,"priority":1824,"main_image":2050,"status":5,"tags":2051,"dictionary":2059,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"64347aaa047091000193b03f",{"id":2043,"first_name":2044,"last_name":877,"slug":2045,"avatar":2046},"61dc4e87df4bcb00010bd508","Mary Okosun","mary-okosun","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fokosun.png","How to use Localazy CLI to streamline your localization workflow","how-to-use-localazy-cli-to-streamline-your-localization-workflow","2023-05-16T17:18:35.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F05\u002Fultimate-localazy-CLI-guide.png",[2052,2053,2056],{"id":451,"created_on":1828,"status":5,"label":759,"slug":540,"on_index_page":160},{"id":451,"created_on":1828,"status":5,"label":2054,"slug":2055,"on_index_page":160},"Continuous Localization","continuous-localization",{"id":451,"created_on":1828,"status":5,"label":2057,"slug":2058,"on_index_page":160},"Guide","guide",[],{"id":2061,"owner":2062,"created_by":10,"sort":10,"title":2063,"slug":2064,"modified_on":877,"created_on":2065,"pinned":160,"badge":10,"priority":1824,"main_image":2066,"status":5,"tags":2067,"dictionary":2074,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"63dd1bf30470910001939f8b",{"id":2043,"first_name":2044,"last_name":877,"slug":2045,"avatar":2046},"The ultimate guide to Localazy API","the-ultimate-guide-to-localazy-api","2023-03-15T10:00:00.000+01:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F03\u002Fultimate-localazy-api-guide.png",[2068,2069,2072,2073],{"id":451,"created_on":1828,"status":5,"label":771,"slug":775,"on_index_page":160},{"id":451,"created_on":1828,"status":5,"label":2070,"slug":2071,"on_index_page":160},"Automated Localization","automated-localization",{"id":451,"created_on":1828,"status":5,"label":1873,"slug":1874,"on_index_page":160},{"id":451,"created_on":1828,"status":5,"label":2057,"slug":2058,"on_index_page":160},[],{"id":4,"sort":10,"created_on":2076,"name":2077,"cta_link":2078,"banner_image":2079},"2022-03-17T12:23:14.000Z","default","https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Flocalazy-ai",{"id":2080},"72defd59-a21d-44b9-822c-4e183ca62b99"]