[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"main-navigation":3,"footer-homepage":723,"footer-settings":790,"footer-integrations":903,"blog-post-nav-nav":1814,"blog-post-nav-[USE LATEST FEATURED]":1836,"blog-setting-up-i18n-in-your-react-app-from-day-one":1852},[4,211,451,582,715,719],{"id":5,"name":6,"url":7,"url_text":7,"status":8,"groups":9},2,"Solutions",null,"published",[10,24,99,135],{"navigation_items_group_id":11},{"id":12,"sort":13,"status":8,"name":14,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":17,"show_all_url":7,"represent_as_tile":15,"items":18},3,5,"Featured Article",false,"top",true,[19],{"collection":20,"item":21},"blog_post_navigation_item_type",{"id":22,"status":8,"sort":7,"show_author_img":17,"blog_post_tag":23,"description":7},4,"nav",{"navigation_items_group_id":25},{"id":13,"sort":26,"status":8,"name":27,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":28,"represent_as_tile":17,"items":29},1,"Your Role","\u002Froles",[30,42,52,64,75,87],{"collection":31,"item":32},"relation_navigation_item_type",{"id":26,"status":8,"sort":7,"name":33,"item":34},"CMO",[35],{"collection":36,"item":37},"personas",{"id":26,"status":8,"sort":7,"slug":38,"icon":39},"chief-marketing-officers",{"id":40,"title":41},"526097d8-176f-48e5-83d3-2fc4d77061f9","La Mail Bulk",{"collection":31,"item":43},{"id":12,"status":8,"sort":7,"name":44,"item":45},"CTO",[46],{"collection":36,"item":47},{"id":22,"status":8,"sort":7,"slug":48,"icon":49},"chief-technical-officers",{"id":50,"title":51},"f808fdf0-c78b-4294-ba59-fe25f46fe825","La Mechanic",{"collection":31,"item":53},{"id":54,"status":8,"sort":7,"name":55,"item":56},20,"Product Manager",[57],{"collection":36,"item":58},{"id":59,"status":8,"sort":7,"slug":60,"icon":61},18,"product-managers",{"id":62,"title":63},"ea39586a-21fc-4b34-ba87-496028e5198f","La Worker",{"collection":31,"item":65},{"id":66,"status":8,"sort":7,"name":67,"item":68},37,"Translator",[69],{"collection":36,"item":70},{"id":54,"status":8,"sort":7,"slug":71,"icon":72},"professional-translators",{"id":73,"title":74},"07945171-d51d-4ca8-96c0-21cde9db258f","La Chat",{"collection":31,"item":76},{"id":77,"status":8,"sort":7,"name":78,"item":79},38,"Developer",[80],{"collection":36,"item":81},{"id":82,"status":8,"sort":7,"slug":83,"icon":84},30,"software-developers",{"id":85,"title":86},"1806e46d-c551-4845-bf42-4407344d229e","La Terminal",{"collection":31,"item":88},{"id":89,"status":8,"sort":7,"name":90,"item":91},27,"Localization Manager",[92],{"collection":36,"item":93},{"id":94,"status":8,"sort":7,"slug":95,"icon":96},6,"localization-managers",{"id":97,"title":98},"dac69bd1-bf5d-41d0-87d4-dd13e314698a","La Language",{"navigation_items_group_id":100},{"id":101,"sort":12,"status":8,"name":102,"render_show_all_url":15,"show_all_url_position":103,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":104},9,"Use cases","bottom",[105,111,116,121,125,130],{"collection":106,"item":107},"simple_link_navigation_item_type",{"id":108,"status":8,"sort":7,"url":109,"url_text":110,"show_favorite_icon":15},24,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fsoftware-localization","Software localization",{"collection":106,"item":112},{"id":113,"status":8,"sort":7,"url":114,"url_text":115,"show_favorite_icon":15},26,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fmobile-app-localization","Mobile app localization",{"collection":106,"item":117},{"id":118,"status":8,"sort":7,"url":119,"url_text":120,"show_favorite_icon":15},25,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fwebsite-localization","Website localization",{"collection":106,"item":122},{"id":89,"status":8,"sort":7,"url":123,"url_text":124,"show_favorite_icon":15},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fdesign-localization","Design localization",{"collection":106,"item":126},{"id":127,"status":8,"sort":7,"url":128,"url_text":129,"show_favorite_icon":15},28,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fgame-localization","Game localization",{"collection":106,"item":131},{"id":132,"status":8,"sort":7,"url":133,"url_text":134,"show_favorite_icon":15},29,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fhelp-and-docs-localization","Help & docs localization",{"navigation_items_group_id":136},{"id":137,"sort":5,"status":8,"name":138,"render_show_all_url":15,"show_all_url_position":103,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":139},8,"Industry",[140,152,163,173,184,193,204],{"collection":31,"item":141},{"id":142,"status":8,"sort":7,"name":143,"item":144},23,"Digital Agencies",[145],{"collection":36,"item":146},{"id":147,"status":8,"sort":7,"slug":148,"icon":149},7,"digital-agencies",{"id":150,"title":151},"547f5619-b21d-4b29-86f1-8b2200313cde","La Digi Agency",{"collection":31,"item":153},{"id":154,"status":8,"sort":7,"name":155,"item":156},39,"Startups & SaaS",[157],{"collection":36,"item":158},{"id":5,"status":8,"sort":7,"slug":159,"icon":160},"startups",{"id":161,"title":162},"da1516e2-4afc-40a2-bcbf-a8161e2d610d","La Saa S",{"collection":31,"item":164},{"id":5,"status":8,"sort":7,"name":165,"item":166},"E-commerce",[167],{"collection":36,"item":168},{"id":13,"status":8,"sort":7,"slug":169,"icon":170},"e-commerce",{"id":171,"title":172},"a3d09cd2-054f-4bb5-a0a2-d3d207db65df","La Ecommerce",{"collection":31,"item":174},{"id":175,"status":8,"sort":7,"name":176,"item":177},19,"FinTech Platforms",[178],{"collection":36,"item":179},{"id":89,"status":8,"sort":7,"slug":180,"icon":181},"fintech",{"id":182,"title":183},"147339ba-07d1-4e5e-baad-23d27e60c919","La Money",{"collection":31,"item":185},{"id":108,"status":8,"sort":7,"name":186,"item":187},"Translation Agencies",[188],{"collection":36,"item":189},{"id":108,"status":8,"sort":7,"slug":190,"icon":191},"translation-agencies",{"id":192,"title":98},"15d6fe33-2af8-4d6e-933d-5caa64394511",{"collection":31,"item":194},{"id":195,"status":8,"sort":7,"name":196,"item":197},22,"Travel & Tourism",[198],{"collection":36,"item":199},{"id":12,"status":8,"sort":7,"slug":200,"icon":201},"tourism",{"id":202,"title":203},"23a785e8-0ae5-4c4b-8452-aab1b58182a6","La Travel",{"collection":31,"item":205},{"id":118,"status":8,"sort":7,"name":206,"item":207},"Nonprofit Causes",[208],{"collection":36,"item":209},{"id":127,"status":8,"sort":7,"slug":210,"icon":7},"nonprofit",{"id":13,"name":212,"url":7,"url_text":7,"status":8,"groups":213},"Features",[214,284,342,392],{"navigation_items_group_id":215},{"id":216,"sort":94,"status":8,"name":217,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":218},11,"Localization",[219,228,237,246,255,259,267,276],{"collection":31,"item":220},{"id":221,"status":8,"sort":7,"name":222,"item":223},44,"Localization services",[224],{"collection":225,"item":226},"products",{"id":101,"status":8,"slug":227},"continuous-localization-team",{"collection":31,"item":229},{"id":230,"status":8,"sort":7,"name":231,"item":232},45,"Translation management",[233],{"collection":234,"item":235},"term_landing_page",{"id":132,"status":8,"slug":236},"translation-management-system",{"collection":31,"item":238},{"id":239,"status":8,"sort":7,"name":240,"item":241},46,"Context Screenshots",[242],{"collection":225,"item":243},{"id":244,"status":8,"slug":245},13,"context-screenshots-ocr",{"collection":31,"item":247},{"id":248,"status":8,"sort":7,"name":249,"item":250},47,"Translation Glossary",[251],{"collection":225,"item":252},{"id":253,"status":8,"slug":254},17,"glossary",{"collection":106,"item":256},{"id":22,"status":8,"sort":7,"url":257,"url_text":258,"show_favorite_icon":15},"\u002Fdocs\u002Fgeneral\u002Freviewing-translations","Quality control",{"collection":31,"item":260},{"id":261,"status":8,"sort":7,"name":262,"item":263},34,"Connected Projects",[264],{"collection":225,"item":265},{"id":26,"status":8,"slug":266},"connected-projects",{"collection":31,"item":268},{"id":269,"status":8,"sort":7,"name":270,"item":271},64,"Plural handling",[272],{"collection":225,"item":273},{"id":274,"status":8,"slug":275},32,"plurals",{"collection":31,"item":277},{"id":278,"status":8,"sort":7,"name":279,"item":280},65,"Style guides",[281],{"collection":225,"item":282},{"id":77,"status":8,"slug":283},"style-guide",{"navigation_items_group_id":285},{"id":286,"sort":147,"status":8,"name":287,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":288},12,"Translation",[289,297,305,309,317,325,334],{"collection":31,"item":290},{"id":291,"status":8,"sort":7,"name":292,"item":293},36,"Professional translations",[294],{"collection":234,"item":295},{"id":82,"status":8,"slug":296},"professional-translation-services",{"collection":31,"item":298},{"id":299,"status":8,"sort":7,"name":300,"item":301},48,"Crowdsourced translations",[302],{"collection":225,"item":303},{"id":137,"status":8,"slug":304},"share-tm",{"collection":106,"item":306},{"id":13,"status":8,"sort":7,"url":307,"url_text":308,"show_favorite_icon":15},"\u002Fdocs\u002Fgeneral\u002Ftranslating-strings","Translation interface",{"collection":31,"item":310},{"id":311,"status":8,"sort":7,"name":312,"item":313},55,"Machine translations",[314],{"collection":225,"item":315},{"id":13,"status":8,"slug":316},"machine-translation",{"collection":31,"item":318},{"id":319,"status":8,"sort":7,"name":320,"item":321},60,"Localazy AI translation",[322],{"collection":225,"item":323},{"id":132,"status":8,"slug":324},"localazy-ai",{"collection":31,"item":326},{"id":327,"status":8,"sort":7,"name":328,"item":329},61,"Translation Memory",[330],{"collection":225,"item":331},{"id":332,"status":8,"slug":333},35,"translation-memory",{"collection":31,"item":335},{"id":336,"status":8,"sort":7,"name":337,"item":338},63,"Code & placeholders",[339],{"collection":225,"item":340},{"id":82,"status":8,"slug":341},"code-and-placeholders",{"navigation_items_group_id":343},{"id":244,"sort":137,"status":8,"name":344,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":345},"Management",[346,350,358,367,376,384,388],{"collection":106,"item":347},{"id":137,"status":8,"sort":7,"url":348,"url_text":349,"show_favorite_icon":15},"\u002Fdocs\u002Fgeneral\u002Fdefining-user-roles","User roles",{"collection":31,"item":351},{"id":352,"status":8,"sort":7,"name":353,"item":354},51,"Duplicity Linking",[355],{"collection":225,"item":356},{"id":175,"status":8,"slug":357},"duplicity-linking",{"collection":31,"item":359},{"id":360,"status":8,"sort":7,"name":361,"item":362},52,"Language Permissions",[363],{"collection":225,"item":364},{"id":365,"status":8,"slug":366},21,"language-permissions",{"collection":31,"item":368},{"id":369,"status":370,"sort":7,"name":371,"item":372},53,"draft","Automations",[373],{"collection":225,"item":374},{"id":54,"status":8,"slug":375},"automations",{"collection":31,"item":377},{"id":378,"status":8,"sort":7,"name":379,"item":380},58,"Branching",[381],{"collection":225,"item":382},{"id":89,"status":8,"slug":383},"branching",{"collection":106,"item":385},{"id":365,"status":370,"sort":7,"url":386,"url_text":387,"show_favorite_icon":15},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fsso-configuration","SSO",{"collection":106,"item":389},{"id":195,"status":370,"sort":7,"url":390,"url_text":391,"show_favorite_icon":15},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Flanguage-statistics","Reporting",{"navigation_items_group_id":393},{"id":394,"sort":101,"status":8,"name":395,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":396},14,"Development",[397,404,412,419,426,434,443],{"collection":31,"item":398},{"id":132,"status":8,"sort":7,"name":399,"item":400},"Translation API",[401],{"collection":225,"item":402},{"id":216,"status":8,"slug":403},"translation-api",{"collection":31,"item":405},{"id":406,"status":8,"sort":7,"name":407,"item":408},33,"Localazy CLI",[409],{"collection":225,"item":410},{"id":147,"status":8,"slug":411},"cli",{"collection":31,"item":413},{"id":274,"status":8,"sort":7,"name":414,"item":415},"Language CDN",[416],{"collection":225,"item":417},{"id":22,"status":8,"slug":418},"language-cdn",{"collection":31,"item":420},{"id":127,"status":8,"sort":7,"name":421,"item":422},"Releases",[423],{"collection":225,"item":424},{"id":94,"status":8,"slug":425},"releases",{"collection":31,"item":427},{"id":428,"status":370,"sort":7,"name":429,"item":430},57,"Format Conversions",[431],{"collection":225,"item":432},{"id":5,"status":8,"slug":433},"format-conversions",{"collection":31,"item":435},{"id":436,"status":8,"sort":7,"name":437,"item":438},59,"Webhooks",[439],{"collection":225,"item":440},{"id":441,"status":8,"slug":442},31,"webhooks",{"collection":31,"item":444},{"id":445,"status":8,"sort":7,"name":446,"item":447},62,"Export Aliases",[448],{"collection":225,"item":449},{"id":406,"status":8,"slug":450},"export-aliases",{"id":22,"name":452,"url":7,"url_text":7,"status":8,"groups":453},"Integrations",[454,572],{"navigation_items_group_id":455},{"id":147,"sort":456,"status":8,"name":457,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":458},10,"Most popular",[459],{"collection":31,"item":460},{"id":286,"status":8,"sort":7,"name":452,"item":461},[462,470,477,484,491,498,505,512,519,526,533,542,549,556,564],{"collection":463,"item":464},"platforms",{"id":94,"status":8,"sort":26,"slug":465,"name":466,"icon":467},"android","Android",{"id":468,"title":469},"ff965add-53b0-44ad-b27c-ea4ef641d384","Ic Outline Android",{"collection":463,"item":471},{"id":147,"status":8,"sort":5,"slug":472,"name":473,"icon":474},"ios","iOS",{"id":475,"title":476},"886285d7-816a-4430-b5a5-edfe307b238e","Ios",{"collection":463,"item":478},{"id":406,"status":8,"sort":12,"slug":479,"name":480,"icon":481},"react","React",{"id":482,"title":483},"26757a90-88a3-4a94-b587-9f38614ed3bd","Logos React",{"collection":463,"item":485},{"id":175,"status":8,"sort":22,"slug":486,"name":487,"icon":488},"vuejs","Vue.js",{"id":489,"title":490},"6180b41f-3249-47d3-adcd-50fe1cf11bf1","Vue",{"collection":463,"item":492},{"id":493,"status":8,"sort":13,"slug":494,"name":495,"icon":496},16,"angular","Angular",{"id":497,"title":495},"2a31a97a-48c5-4531-aa36-41c9dd0bdbef",{"collection":463,"item":499},{"id":26,"status":8,"sort":94,"slug":500,"name":501,"icon":502},"flutter","Flutter",{"id":503,"title":504},"b9f13a11-9328-4a03-86cf-b20de0685606","Logos Flutter",{"collection":463,"item":506},{"id":12,"status":8,"sort":216,"slug":507,"name":508,"icon":509},"typescript","TypeScript",{"id":510,"title":511},"8d1319b5-8a96-4199-8407-00add3418b1f","Logos Typescript Icon",{"collection":463,"item":513},{"id":441,"status":8,"sort":286,"slug":514,"name":515,"icon":516},"javascript","JavaScript",{"id":517,"title":518},"4218d0c9-7e6b-494d-9663-37ceaf93ee8c","Logos Javascript",{"collection":463,"item":520},{"id":286,"status":8,"sort":54,"slug":521,"name":522,"icon":523},"json","JSON",{"id":524,"title":525},"99ac3b7c-dba5-4693-a4f4-1f27a6d7782d","Logos Json",{"collection":463,"item":527},{"id":365,"status":8,"sort":365,"slug":528,"name":529,"icon":530},"xliff","XLIFF",{"id":531,"title":532},"ca424cc8-e8a7-4aef-8dca-ef4a4d1334fc","Format",{"collection":463,"item":534},{"id":535,"status":8,"sort":536,"slug":537,"name":538,"icon":539},72,54,"strapi","Strapi",{"id":540,"title":541},"cde7f1d0-f2e0-4243-929e-a3f8f9146e69","Strapi Logo Purple",{"collection":463,"item":543},{"id":319,"status":8,"sort":311,"slug":544,"name":545,"icon":546},"figma","Figma",{"id":547,"title":548},"813745a4-a77d-4735-93b7-e0dd731b2304","Figma Icon",{"collection":463,"item":550},{"id":352,"status":8,"sort":248,"slug":551,"name":552,"icon":553},"microsoft-excel","Microsoft Excel",{"id":554,"title":555},"7a175955-7b96-4561-939f-a0e1924faa40","Excel",{"collection":463,"item":557},{"id":558,"status":8,"sort":327,"slug":559,"name":560,"icon":561},66,"github-actions","GitHub Actions",{"id":562,"title":563},"da17554f-ac6d-443d-9bac-1f29645ec1c6","Github Icon",{"collection":463,"item":565},{"id":566,"status":8,"sort":567,"slug":568,"name":569,"icon":570},97,999,"webflow","Webflow",{"id":571,"title":569},"ff43a386-52f8-499f-b77c-ab9a30f4a77e",{"navigation_items_group_id":573},{"id":22,"sort":216,"status":8,"name":574,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":575},"Explore more",[576],{"collection":577,"item":578},"text_link_navigation_item_type",{"id":26,"status":8,"sort":7,"text":579,"url":580,"url_text":581},"Localazy is a technology-agnostic platform supporting 50+ frameworks, file formats & popular tools.","\u002Fintegrations","See all integrations",{"id":26,"name":583,"url":7,"url_text":7,"status":8,"groups":584},"Resources",[585,618,624],{"navigation_items_group_id":586},{"id":26,"sort":286,"status":8,"name":587,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":588},"Helpful Links",[589,593,597,601,605,609,614],{"collection":106,"item":590},{"id":244,"status":8,"sort":7,"url":591,"url_text":592,"show_favorite_icon":17},"\u002Fblog","Localazy Blog",{"collection":106,"item":594},{"id":394,"status":8,"sort":7,"url":595,"url_text":596,"show_favorite_icon":17},"\u002Fdocs","Documentation",{"collection":106,"item":598},{"id":26,"status":8,"sort":7,"url":599,"url_text":600,"show_favorite_icon":15},"https:\u002F\u002Fdiscuss.localazy.com\u002F","Discussion Forum",{"collection":106,"item":602},{"id":286,"status":8,"sort":7,"url":603,"url_text":604,"show_favorite_icon":15},"\u002Fcase-study","Case Studies",{"collection":106,"item":606},{"id":12,"status":8,"sort":7,"url":607,"url_text":608,"show_favorite_icon":15},"\u002Fpartnership","Become a Partner",{"collection":106,"item":610},{"id":611,"status":8,"sort":7,"url":612,"url_text":613,"show_favorite_icon":15},15,"\u002Ffaq","FAQ",{"collection":106,"item":615},{"id":253,"status":8,"sort":7,"url":616,"url_text":617,"show_favorite_icon":15},"\u002Ftags\u002Frelease-update","Release Updates",{"navigation_items_group_id":619},{"id":5,"sort":394,"status":8,"name":592,"render_show_all_url":17,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":591,"represent_as_tile":15,"items":620},[621],{"collection":20,"item":622},{"id":12,"status":8,"sort":7,"show_author_img":15,"blog_post_tag":623,"description":7},"[USE LATEST FEATURED]",{"navigation_items_group_id":625},{"id":94,"sort":244,"status":8,"name":596,"render_show_all_url":17,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":595,"represent_as_tile":15,"items":626},[627,641,653,664,676,686,697,705],{"collection":31,"item":628},{"id":22,"status":8,"sort":7,"name":629,"item":630},"General",[631],{"collection":632,"item":633},"docs_section",{"id":5,"status":8,"sort":26,"slug":634,"name":629,"icon":635,"featured_icon":638},"general",{"id":636,"title":637},"423101f1-308c-42f1-8dfe-53272019e7cb","Global",{"id":639,"title":640},"0f7ca4cb-dc3b-4f62-b476-132ed5c4931f","General Doc",{"collection":31,"item":642},{"id":13,"status":8,"sort":7,"name":643,"item":644},"CLI",[645],{"collection":632,"item":646},{"id":12,"status":8,"sort":5,"slug":411,"name":643,"icon":647,"featured_icon":650},{"id":648,"title":649},"2f7a4573-8265-4d76-8d55-ce0cc79b8983","Cli",{"id":651,"title":652},"3f76ff7b-0e74-4046-bb03-4ca99c3b66d5","Doc Cat Cli",{"collection":31,"item":654},{"id":137,"status":8,"sort":7,"name":655,"item":656},"API",[657],{"collection":632,"item":658},{"id":54,"status":8,"sort":12,"slug":659,"name":655,"icon":660,"featured_icon":661},"api",{"id":648,"title":649},{"id":662,"title":663},"20866781-e69b-4e01-9456-05437487b75c","API Doc",{"collection":31,"item":665},{"id":666,"status":8,"sort":7,"name":667,"item":668},50,"CDN",[669],{"collection":632,"item":670},{"id":113,"status":8,"sort":22,"slug":671,"name":667,"icon":672,"featured_icon":673},"cdn",{"id":636,"title":637},{"id":674,"title":675},"a8ee9cb7-4e02-41f0-b595-eb518c3085b6","Doc Cat Cdn",{"collection":31,"item":677},{"id":94,"status":8,"sort":7,"name":466,"item":678},[679],{"collection":632,"item":680},{"id":26,"status":8,"sort":13,"slug":465,"name":466,"icon":681,"featured_icon":683},{"id":682,"title":466},"fb8329ae-0c0c-4fbc-bcdc-83f2eeda1039",{"id":684,"title":685},"f7c0dec8-5b42-4943-ab3a-e3665723ad6f","Doc Cat Android",{"collection":31,"item":687},{"id":147,"status":8,"sort":7,"name":473,"item":688},[689],{"collection":632,"item":690},{"id":22,"status":8,"sort":94,"slug":472,"name":473,"icon":691,"featured_icon":694},{"id":692,"title":693},"289e136c-55df-4d51-847b-1782a2308ee4","Ios Blue",{"id":695,"title":696},"2968d3f0-14b5-4427-82e7-f1ea2de17846","Doc Cat Ios",{"collection":31,"item":698},{"id":101,"status":8,"sort":7,"name":545,"item":699},[700],{"collection":632,"item":701},{"id":365,"status":8,"sort":147,"slug":544,"name":545,"icon":702,"featured_icon":703},{"id":648,"title":649},{"id":704,"title":545},"f5e66b5b-a439-47f6-af4a-6ad261de2e87",{"collection":31,"item":706},{"id":456,"status":8,"sort":7,"name":538,"item":707},[708],{"collection":632,"item":709},{"id":142,"status":8,"sort":137,"slug":537,"name":538,"icon":710,"featured_icon":712},{"id":711,"title":538},"3b4b03c7-e131-49e6-a014-c8c2c8a2751e",{"id":713,"title":714},"1dd05c76-e517-4aea-a3d8-49cfddb40056","Strapi Doc",{"id":12,"name":716,"url":717,"url_text":716,"status":8,"groups":718},"Pricing","\u002Fpricing",[],{"id":94,"name":720,"url":721,"url_text":720,"status":8,"groups":722},"Book a demo","\u002Fbook-demo",[],{"status":8,"header_badges":724,"footer_badges":742,"footer_secured_badges":748,"slider_badges":760},[725,732,737],{"id":26,"status":8,"sort":7,"link":726,"title":727,"badgeType":728,"badgeName":729,"metadata":7,"image":730},"https:\u002F\u002Fwww.g2.com\u002Fproducts\u002Flocalazy\u002Freviews","Best meets requirements","Other","G2-winter-24-best-meets-requirments",{"id":731},"8d5dd6fd-6995-4c92-8219-a6ed5ba6acdc",{"id":5,"status":8,"sort":7,"link":726,"title":733,"badgeType":728,"badgeName":734,"metadata":7,"image":735},"Best support","G2-winter-24-best-support",{"id":736},"e59dd465-84d9-45c7-987d-dd4048fd6992",{"id":12,"status":8,"sort":7,"link":726,"title":738,"badgeType":728,"badgeName":739,"metadata":7,"image":740},"Easiest admin","G2-winter-24-easiest-admin",{"id":741},"5f12c4c8-bec0-47cf-87b4-a4502e9f1bd2",[743],{"id":286,"status":8,"sort":7,"link":726,"title":744,"badgeType":728,"badgeName":745,"metadata":7,"image":746},"Users love us","Users love us 25",{"id":747},"232416a5-86ba-4be6-85a5-b88802003d53",[749,755],{"id":216,"status":8,"sort":7,"link":750,"title":751,"badgeType":728,"badgeName":752,"metadata":7,"image":753},"https:\u002F\u002Fsprinto.com\u002Fget-iso-27001\u002F","Sprinto ISO 27001","Sprinto ISO 27001 certificate",{"id":754},"c1c6c06c-6caf-4b78-8a7e-9606c395eb61",{"id":244,"status":8,"sort":7,"link":756,"title":757,"badgeType":728,"badgeName":757,"metadata":7,"image":758},"https:\u002F\u002Fwww.aicpa.org\u002Fsoc4so","SOC certificate",{"id":759},"4f4bc0a6-09a0-41df-8295-8f990d96d941",[761,767,771,775,779,783,788],{"id":13,"status":8,"sort":7,"link":726,"title":762,"badgeType":728,"badgeName":763,"metadata":764,"image":765},"Most likely to recommend","a","",{"id":766},"da055731-3f11-4fc7-96f2-c11c0b84c831",{"id":94,"status":8,"sort":7,"link":726,"title":768,"badgeType":728,"badgeName":7,"metadata":7,"image":769},"EMEA High Performer",{"id":770},"586fb488-81f2-41db-a4e8-ef309e50c0e6",{"id":147,"status":8,"sort":7,"link":726,"title":772,"badgeType":728,"badgeName":7,"metadata":7,"image":773},"Ease of Doing Business With",{"id":774},"bfa26865-430e-463d-9886-cb56a8a8ecf6",{"id":137,"status":8,"sort":7,"link":726,"title":776,"badgeType":728,"badgeName":7,"metadata":7,"image":777},"High Performer",{"id":778},"2cc1ba0f-c23a-4c97-ad4a-a655c97466fe",{"id":101,"status":8,"sort":7,"link":726,"title":780,"badgeType":728,"badgeName":7,"metadata":7,"image":781},"Fastest Implementation",{"id":782},"6f297758-1c95-45f4-a6e9-528319897132",{"id":456,"status":8,"sort":7,"link":784,"title":785,"badgeType":728,"badgeName":7,"metadata":7,"image":786},"https:\u002F\u002Fwww.intercert.com\u002Fservices\u002Fgovernance-risk-compliance\u002Fiso-iec-27001","Intercert ISO 27001",{"id":787},"0521a5f1-e1f2-4da6-a2bc-dc92773f2a7b",{"id":216,"status":8,"sort":7,"link":750,"title":751,"badgeType":728,"badgeName":752,"metadata":7,"image":789},{"id":754},{"id":26,"status":8,"security_section_title":791,"loved_section_title":792,"columns":793,"social_links":863,"policy_links":893},"Secured & trusted","Loved by users",[794,806,821,842,845],{"id":26,"status":8,"sort":7,"title":795,"column_key":796,"links":797},"Localazy","connect",[798,800,803],{"id":216,"status":8,"sort":26,"title":720,"url":799},"___LOCALAZY_MEETING_URL___",{"id":286,"status":8,"sort":5,"title":801,"url":802},"Contact","\u002Fcontact",{"id":365,"status":8,"sort":12,"title":804,"url":805},"About us","\u002Fabout-us",{"id":5,"status":8,"sort":7,"title":807,"column_key":808,"links":809},"Programs","programs",[810,812,815,818],{"id":26,"status":8,"sort":22,"title":811,"url":607},"Partner Program",{"id":5,"status":8,"sort":13,"title":813,"url":814},"Ambassador Program","\u002Fambassador",{"id":12,"status":8,"sort":94,"title":816,"url":817},"Startup Program","\u002Ffor\u002Fstartups",{"id":22,"status":8,"sort":147,"title":819,"url":820},"Nonprofits","\u002Ffor\u002Fnonprofit",{"id":12,"status":8,"sort":7,"title":822,"column_key":823,"links":824},"Use Cases","use_cases",[825,828,831,833,836,839],{"id":13,"status":8,"sort":137,"title":826,"url":827},"Software Localization","\u002Fterm\u002Fsoftware-localization",{"id":94,"status":8,"sort":101,"title":829,"url":830},"Machine Translation Services","\u002Ffeatures\u002Fmachine-translation",{"id":147,"status":8,"sort":456,"title":399,"url":832},"\u002Ffeatures\u002Ftranslation-api",{"id":137,"status":8,"sort":216,"title":834,"url":835},"Crowdsourced Translations","\u002Ffeatures\u002Fshare-tm",{"id":101,"status":8,"sort":286,"title":837,"url":838},"Figma i18n & localization","\u002Ffeatures\u002Ffigma-localization-plugin",{"id":456,"status":8,"sort":244,"title":840,"url":841},"Translation as a Service","\u002Fterm\u002Ftranslation-service",{"id":22,"status":8,"sort":7,"title":452,"column_key":843,"links":844},"integrations",[],{"id":13,"status":8,"sort":7,"title":583,"column_key":846,"links":847},"resources",[848,849,852,853,856,858,859,860],{"id":244,"status":8,"sort":394,"title":596,"url":595},{"id":394,"status":8,"sort":611,"title":850,"url":851},"Dictionary","\u002Fdictionary",{"id":611,"status":8,"sort":493,"title":604,"url":603},{"id":493,"status":8,"sort":253,"title":854,"url":855},"Discussion forum","___DISCUSS_URL___",{"id":253,"status":8,"sort":59,"title":857,"url":591},"Localization Blog",{"id":59,"status":8,"sort":175,"title":613,"url":612},{"id":175,"status":8,"sort":54,"title":716,"url":717},{"id":54,"status":8,"sort":365,"title":861,"url":862},"Brand assets","https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Fu\u002F1\u002Ffolders\u002F1tZqsZHBlGelz7A2FwTsiwrs4j3sd9HTk",[864,869,874,879,884,889],{"id":26,"status":8,"sort":7,"platform":865,"icon":866,"url":867,"label":868},"feed","rss","\u002Ffeed.xml","Localazy RSS Feed",{"id":5,"status":8,"sort":7,"platform":870,"icon":871,"url":872,"label":873},"facebook","fb-logo","https:\u002F\u002Fwww.facebook.com\u002Flocalazy\u002F","Localazy facebook",{"id":12,"status":8,"sort":7,"platform":875,"icon":876,"url":877,"label":878},"github","github-logo","https:\u002F\u002Fgithub.com\u002Flocalazy","Localazy GitHub",{"id":22,"status":8,"sort":7,"platform":880,"icon":881,"url":882,"label":883},"x","x-twitter","https:\u002F\u002Fx.com\u002Flocalazy","Localazy X",{"id":13,"status":8,"sort":7,"platform":885,"icon":886,"url":887,"label":888},"linkedin","linkedin-logo","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002F37836599\u002F","Localazy LinkedIn",{"id":94,"status":8,"sort":7,"platform":890,"icon":891,"url":855,"label":892},"discourse","discourse-logo","Localazy Discourse",[894,897,900],{"id":26,"status":8,"sort":7,"title":895,"url":896,"action":7},"Privacy policy","\u002Fprivacy-policy",{"id":5,"status":8,"sort":7,"title":898,"url":899,"action":7},"Terms & Conditions","\u002Fterms-and-conditions",{"id":12,"status":8,"sort":7,"title":901,"url":7,"action":902},"Cookies","cookie-consent",[904,1044,1122,1228,1314,1393,1482,1573,1660,1759],{"id":406,"status":8,"created_on":905,"modified_on":906,"name":480,"slug":479,"description":907,"docs_link":908,"priority":7,"has_sdk":15,"sort":12,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":909,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"is_enterprise":15,"is_popular":15,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"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":406},"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":521},[],{"id":482},{"id":917},"a97492ec-ee8d-429c-bf66-d0fe59b6e5c9",{"id":13,"status":8,"sort":5,"created_on":919,"label":920,"hidden":15,"icon":921,"translations":923},"2022-03-17T12:23:44.000Z","Web apps",{"id":922},"c9e70e4f-8136-432a-8d82-53c3501a9eb4",[924,926,929,932],{"id":13,"languages_code":925,"label":920},"xxa",{"id":230,"languages_code":927,"label":928},"es","Aplicaciones web",{"id":666,"languages_code":930,"label":931},"cs","Webové aplikace",{"id":436,"languages_code":933,"label":920},"en",[935,942],{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":936,"translations":937},{"id":922},[938,939,940,941],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":137,"status":8,"sort":101,"label":943,"hidden":15,"created_on":944,"icon":7,"translations":945},"Framework","2022-03-17T12:23:45.000Z",[946,947,949,950],{"id":137,"languages_code":925,"label":943},{"id":369,"languages_code":927,"label":948},"Marco",{"id":319,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},67,[953,965,990,1011],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":956},"Translate strings directly or upload them into your Localazy project.","\u002Fdocs\u002Fapi\u002Fintroduction",[957,958,961,963],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},40,"Utilice la API para exportar traducciones e importar contenido de\u002Fa Localazy mediante programación.",{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},"Choose between translating strings directly or uploading them into Localazy.",{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},"Pomocí rozhraní API můžete programovaně exportovat překlady a importovat obsah z\u002Fdo Localazy.",{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"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":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},"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":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},"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":269,"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":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},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":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"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":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},"Carga directa de archivos","Cargue sus textos y traducciones existentes en cualquier formato directamente para empezar rápidamente.",{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},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":7},85,"Direkter Datei-Upload","Laden Sie Ihre Texte und vorhandenen Übersetzungen in einem beliebigen Format direkt hoch, um schnell loszulegen.",{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"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":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},"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":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},"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":7},87,"Befehlszeilenschnittstelle","Die beste Option für Entwickler, die die Lokalisierung zu einem automatisierten Teil ihres Arbeitsablaufs machen möchten.",[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1030},[1031,1032,1033,1034,1035],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1037],{"id":1038,"status":8,"created_on":1039,"sort":7,"slug":1040,"label":1041,"on_faq_index":7},76,"2025-02-26T12:44:29.000Z","front-end-common","Front-end Common",[1043],{"languages_code":925,"name":480,"slug":479,"description":907,"support_type":909,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"id":406,"platforms_id":406,"docs_link":908},{"id":175,"status":8,"created_on":905,"modified_on":1045,"name":487,"slug":486,"description":1046,"docs_link":908,"priority":7,"has_sdk":15,"sort":22,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":909,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"is_enterprise":15,"is_popular":15,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"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":175},"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":521},[],{"id":489},{"id":1053},"8171b836-d6b8-4354-8db3-34ccd384970d",{"id":13,"status":8,"sort":5,"created_on":919,"label":920,"hidden":15,"icon":1055,"translations":1056},{"id":922},[1057,1058,1059,1060],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},[1062,1069],{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":1063,"translations":1064},{"id":922},[1065,1066,1067,1068],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":137,"status":8,"sort":101,"label":943,"hidden":15,"created_on":944,"icon":7,"translations":1070},[1071,1072,1073,1074],{"id":137,"languages_code":925,"label":943},{"id":369,"languages_code":927,"label":948},{"id":319,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},[1076,1082,1092,1099],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1077},[1078,1079,1080,1081],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1083},[1084,1085,1086,1087,1088,1089,1090,1091],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1093},[1094,1095,1096,1097,1098],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1100},[1101,1102,1103,1104,1105],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1108},[1109,1110,1111,1112,1113],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1115,1119],{"id":1004,"status":8,"created_on":1116,"sort":7,"slug":1117,"label":1118,"on_faq_index":7},"2023-03-01T11:21:41.000Z","vue-localization","Vue.js Localization",{"id":1038,"status":8,"created_on":1039,"sort":7,"slug":1040,"label":1041,"on_faq_index":7},[1121],{"languages_code":925,"name":487,"slug":486,"description":1046,"support_type":909,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"id":175,"platforms_id":175,"docs_link":908},{"id":26,"status":8,"created_on":905,"modified_on":1123,"name":501,"slug":500,"description":1124,"docs_link":1125,"priority":7,"has_sdk":15,"sort":94,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1126,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":15,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"is_enterprise":15,"is_popular":15,"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":26},"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":503},{"id":1138},"c2674666-4371-4aa4-9a65-438c7363fafe",{"id":94,"status":8,"sort":137,"created_on":944,"label":1140,"hidden":15,"icon":1141,"translations":1143},"Mobile apps",{"id":1142},"c9c7e1f5-8b59-4016-ae0c-6fba9469cd55",[1144,1145,1147,1149],{"id":94,"languages_code":925,"label":1140},{"id":239,"languages_code":927,"label":1146},"Aplicaciones móviles",{"id":311,"languages_code":930,"label":1148},"Mobilní aplikace",{"id":278,"languages_code":933,"label":1140},[1151,1162,1169,1176],{"id":147,"status":8,"sort":175,"label":1152,"hidden":15,"created_on":944,"icon":1153,"translations":1155},"Desktop & Games",{"id":1154},"65b04533-5b4c-430c-b8a4-ecce84754200",[1156,1157,1159,1161],{"id":147,"languages_code":925,"label":1152},{"id":248,"languages_code":927,"label":1158},"Escritorio y Juegos",{"id":1004,"languages_code":930,"label":1160},"Stolní počítače & Hry",{"id":558,"languages_code":933,"label":1152},{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":1163,"translations":1164},{"id":922},[1165,1166,1167,1168],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":94,"status":8,"sort":137,"label":1140,"hidden":15,"created_on":944,"icon":1170,"translations":1171},{"id":1142},[1172,1173,1174,1175],{"id":94,"languages_code":925,"label":1140},{"id":239,"languages_code":927,"label":1146},{"id":311,"languages_code":930,"label":1148},{"id":278,"languages_code":933,"label":1140},{"id":82,"status":8,"sort":274,"label":1177,"hidden":17,"created_on":944,"icon":7,"translations":1178},"ARB",[1179,1180,1182,1184],{"id":82,"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":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1188},[1189,1190,1191,1192],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1194},[1195,1196,1197,1198,1199,1200,1201,1202],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1204},[1205,1206,1207,1208,1209],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1211},[1212,1213,1214,1215,1216],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1219},[1220,1221,1222,1223,1224],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],[1227],{"languages_code":925,"name":501,"slug":500,"description":1124,"support_type":1126,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"id":26,"platforms_id":26,"docs_link":1125},{"id":441,"status":8,"created_on":1229,"modified_on":1230,"name":515,"slug":514,"description":1231,"docs_link":1232,"priority":7,"has_sdk":15,"sort":286,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1233,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"is_enterprise":15,"is_popular":15,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"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":441},"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":517},{"id":1240},"2c6699eb-1d80-4772-8268-5597dbcead8c",{"id":456,"status":8,"sort":456,"created_on":944,"label":1242,"hidden":15,"icon":1243,"translations":1245},"Programming Languages",{"id":1244},"8c5836bb-1fbe-49c5-9330-8f931838c457",[1246,1247,1249,1252],{"id":456,"languages_code":925,"label":1242},{"id":336,"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":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":1256,"translations":1257},{"id":922},[1258,1259,1260,1261],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":456,"status":8,"sort":456,"label":1242,"hidden":15,"created_on":944,"icon":1263,"translations":1264},{"id":1244},[1265,1266,1267,1268],{"id":456,"languages_code":925,"label":1242},{"id":336,"languages_code":927,"label":1248},{"id":1250,"languages_code":930,"label":1251},{"id":1253,"languages_code":933,"label":1242},[1270,1276,1286,1293],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1271},[1272,1273,1274,1275],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1277},[1278,1279,1280,1281,1282,1283,1284,1285],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1287},[1288,1289,1290,1291,1292],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1294},[1295,1296,1297,1298,1299],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1302},[1303,1304,1305,1306,1307],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1309],{"id":332,"status":8,"created_on":1310,"sort":7,"slug":1311,"label":515,"on_faq_index":15},"2022-06-10T09:49:33.000Z","javascript-i18n-localization",[1313],{"languages_code":925,"name":515,"slug":514,"description":1231,"support_type":1233,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"id":441,"platforms_id":441,"docs_link":1232},{"id":286,"status":8,"created_on":1229,"modified_on":1315,"name":522,"slug":521,"description":1316,"docs_link":908,"priority":7,"has_sdk":15,"sort":54,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1317,"show_in_spa":17,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"is_enterprise":15,"is_popular":17,"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":286},"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":521},[],{"id":524},{"id":1329},"8d614c20-667e-4bee-a64d-7d7ce9c0ee0a",{"id":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1332,"translations":1334},"File formats",{"id":1333},"ab7c8f89-dcce-45ab-9e21-8605aef289c3",[1335,1336,1338,1340],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},"Formatos de archivo",{"id":352,"languages_code":930,"label":1339},"Formáty souborů",{"id":445,"languages_code":933,"label":1331},[1342],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1343,"translations":1344},{"id":1333},[1345,1346,1347,1348],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1350,1356,1366,1373],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1351},[1352,1353,1354,1355],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1357},[1358,1359,1360,1361,1362,1363,1364,1365],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1367},[1368,1369,1370,1371,1372],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1374},[1375,1376,1377,1378,1379],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1382},[1383,1384,1385,1386,1387],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1389],{"id":291,"status":8,"created_on":1390,"sort":7,"slug":521,"label":522,"on_faq_index":15},"2022-06-10T10:49:07.000Z",[1392],{"languages_code":925,"name":522,"slug":521,"description":1316,"support_type":1317,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"id":286,"platforms_id":286,"docs_link":908},{"id":365,"status":8,"created_on":1229,"modified_on":1394,"name":529,"slug":528,"description":1395,"docs_link":1396,"priority":7,"has_sdk":15,"sort":365,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1397,"show_in_spa":15,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"is_enterprise":15,"is_popular":17,"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":365},"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":531},{"id":1410},"889970a6-cce8-4055-b96a-9c3f292aa67f",{"id":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1412,"translations":1413},{"id":1333},[1414,1415,1416,1417],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1419,1426,1433],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1420,"translations":1421},{"id":1333},[1422,1423,1424,1425],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1427,"translations":1428},{"id":1333},[1429,1430,1431,1432],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1434,"translations":1435},{"id":1333},[1436,1437,1438,1439],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1441,1447,1457,1464],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1442},[1443,1444,1445,1446],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1448},[1449,1450,1451,1452,1453,1454,1455,1456],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1458},[1459,1460,1461,1462,1463],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1465},[1466,1467,1468,1469,1470],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1473},[1474,1475,1476,1477,1478],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],[1481],{"languages_code":925,"name":529,"slug":528,"description":1395,"support_type":1397,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"id":365,"platforms_id":365,"docs_link":1396},{"id":54,"status":8,"created_on":1483,"modified_on":1483,"name":1484,"slug":1485,"description":1486,"docs_link":1487,"priority":7,"has_sdk":15,"sort":108,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1397,"show_in_spa":17,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":15,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"is_enterprise":15,"is_popular":17,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"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":54},"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":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1497,"translations":1498},{"id":1333},[1499,1500,1501,1502],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1504,1511,1521],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1505,"translations":1506},{"id":1333},[1507,1508,1509,1510],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":261,"status":8,"sort":261,"label":1512,"hidden":17,"created_on":944,"icon":7,"translations":1513},"C++",[1514,1515,1517,1519],{"id":261,"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":365,"status":8,"sort":108,"label":1522,"hidden":17,"created_on":944,"icon":7,"translations":1523},"Gettext",[1524,1525,1527,1529],{"id":365,"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":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1533},[1534,1535,1536,1537],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1539},[1540,1541,1542,1543,1544,1545,1546,1547],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1549},[1550,1551,1552,1553,1554],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1556},[1557,1558,1559,1560,1561],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1564},[1565,1566,1567,1568,1569],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],[1572],{"languages_code":925,"name":1484,"slug":1485,"description":1486,"support_type":1397,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"id":54,"platforms_id":54,"docs_link":1487},{"id":113,"status":8,"created_on":1229,"modified_on":1574,"name":1575,"slug":1576,"description":1577,"docs_link":1578,"priority":7,"has_sdk":15,"sort":89,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1397,"show_in_spa":17,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":15,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"is_enterprise":15,"is_popular":15,"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":113},"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":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1592,"translations":1593},{"id":1333},[1594,1595,1596,1597],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1599,1606],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1600,"translations":1601},{"id":1333},[1602,1603,1604,1605],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":108,"status":8,"sort":113,"label":1607,"hidden":17,"created_on":944,"icon":7,"translations":1608},"C#",[1609,1610,1612,1614],{"id":108,"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":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1618},[1619,1620,1621,1622],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1624},[1625,1626,1627,1628,1629,1630,1631,1632],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1634},[1635,1636,1637,1638,1639],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1641},[1642,1643,1644,1645,1646],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1649},[1650,1651,1652,1653,1654],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1656],{"id":221,"status":8,"created_on":1657,"sort":7,"slug":1576,"label":1575,"on_faq_index":7},"2022-08-01T16:44:06.000Z",[1659],{"languages_code":925,"name":1575,"slug":1576,"description":1577,"support_type":1397,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"id":113,"platforms_id":113,"docs_link":1578},{"id":535,"status":8,"created_on":1661,"modified_on":1662,"name":538,"slug":537,"description":1663,"docs_link":1664,"priority":7,"has_sdk":7,"sort":536,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1665,"show_in_spa":17,"is_file_format":7,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"is_enterprise":15,"is_popular":17,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":7,"upload_features":7,"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":535},"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":540},{"id":1669},"5995b721-a2ea-487e-ad4b-298a489bbd24",{"id":286,"status":8,"sort":216,"created_on":944,"label":1671,"hidden":15,"icon":1672,"translations":1674},"CMS",{"id":1673},"1172a655-928c-4594-9263-d8afdfd9cd79",[1675,1676,1678,1680],{"id":286,"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":59,"status":8,"sort":253,"label":1684,"hidden":15,"created_on":944,"icon":7,"translations":1685},"Multilingual SEO",[1686,1687,1690,1693],{"id":59,"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":406,"status":8,"sort":406,"label":165,"hidden":15,"created_on":944,"icon":1696,"translations":1698},{"id":1697},"e782ed3f-d954-45ca-8b17-5bf5fe95f30a",[1699,1700,1703,1705],{"id":406,"languages_code":925,"label":165},{"id":1701,"languages_code":927,"label":1702},132,"Comercio electrónico",{"id":1704,"languages_code":930,"label":165},137,{"id":1706,"languages_code":933,"label":165},142,{"id":286,"status":8,"sort":216,"label":1671,"hidden":15,"created_on":944,"icon":1708,"translations":1709},{"id":1673},[1710,1711,1712,1713],{"id":286,"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":5,"status":8,"sort":94,"label":1715,"hidden":15,"created_on":944,"icon":1716,"translations":1718},"Marketing tools",{"id":1717},"098fe6a4-dd2e-42d8-937e-2d8121e6e266",[1719,1720,1723,1725],{"id":5,"languages_code":925,"label":1715},{"id":1721,"languages_code":927,"label":1722},43,"Herramientas de marketing",{"id":299,"languages_code":930,"label":1724},"Marketingové nástroje",{"id":378,"languages_code":933,"label":1715},[1727],{"id":137,"status":8,"sort":7,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"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":137,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":7},"Complemento Oficial de Strapi","Nuestros desarrolladores mantienen un complemento oficial de localización de Strapi. ¡Empiece en unos pocos clics!",{"id":369,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":445,"languages_code":930,"label":1741,"description":1742,"slug":7},"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":7},"Offizielles Strapi-Plugin","Unsere Entwickler pflegen ein offizielles Strapi-Lokalisierungs-Plugin. Starten Sie mit ein paar Klicks!",[],{"id":137,"status":8,"sort":7,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1748},[1749,1750,1751,1752,1753],{"id":137,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":7},{"id":369,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":445,"languages_code":930,"label":1741,"description":1742,"slug":7},{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":7},[1755],{"id":66,"status":8,"created_on":1756,"sort":7,"slug":537,"label":538,"on_faq_index":7},"2022-06-16T09:24:13.000Z",[1758],{"languages_code":925,"name":538,"slug":537,"description":1663,"support_type":1665,"meta_title":7,"meta_description":7,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"id":535,"platforms_id":535,"docs_link":1664},{"id":319,"status":8,"created_on":1229,"modified_on":1760,"name":545,"slug":544,"description":7,"docs_link":1761,"priority":7,"has_sdk":15,"sort":311,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1762,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"is_enterprise":15,"is_popular":17,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":7,"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":319},"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":547},{"id":1769},"7573fed6-8817-4cb4-84d2-be327e6c4891",{"id":12,"status":8,"sort":147,"created_on":944,"label":1771,"hidden":15,"icon":1772,"translations":1774},"Design tools",{"id":1773},"1053d863-b690-4fbd-aadf-dbf2ba282768",[1775,1776,1779,1782],{"id":12,"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":428,"languages_code":933,"label":1771},[1784],{"id":12,"status":8,"sort":147,"label":1771,"hidden":15,"created_on":944,"icon":1785,"translations":1786},{"id":1773},[1787,1788,1789,1790],{"id":12,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},{"id":1780,"languages_code":930,"label":1781},{"id":428,"languages_code":933,"label":1771},[1792],{"id":147,"status":8,"sort":7,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":595,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1795},"official-plugin","Our developers maintain an official plugin for this integration. Start in a few clicks!",[1796,1797,1800,1801],{"id":147,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":142,"languages_code":927,"label":1798,"description":1799,"slug":7},"Plugin Oficial","Nuestros desarrolladores mantienen un plugin oficial para esta integración. ¡Empiece con unos pocos clics!",{"id":132,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":332,"languages_code":930,"label":1802,"description":1803,"slug":7},"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":147,"status":8,"sort":7,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":595,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1806},[1807,1808,1809,1810],{"id":147,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":142,"languages_code":927,"label":1798,"description":1799,"slug":7},{"id":132,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":332,"languages_code":930,"label":1802,"description":1803,"slug":7},[],[1813],{"languages_code":925,"name":545,"slug":544,"description":7,"support_type":1762,"meta_title":7,"meta_description":7,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"id":319,"platforms_id":319,"docs_link":1761},{"id":1815,"owner":1816,"created_by":7,"sort":7,"title":1821,"slug":1822,"modified_on":764,"created_on":1823,"pinned":15,"badge":7,"priority":1824,"main_image":1825,"status":8,"tags":1826,"dictionary":1834,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"69d78a237ab1270001eddabf",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"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","0.7","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F04\u002FLocalazy-AI-translation-api.png",[1827,1829,1832],{"id":319,"created_on":1828,"status":8,"label":655,"slug":659,"on_index_page":15},"2026-05-28 18:02:16",{"id":269,"created_on":1828,"status":8,"label":1830,"slug":1831,"on_index_page":17},"AI","ai",{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},"localization",[],0,{"id":1837,"owner":1838,"created_by":7,"sort":7,"title":1839,"slug":1840,"modified_on":764,"created_on":1841,"pinned":15,"badge":7,"priority":1824,"main_image":1842,"status":8,"tags":1843,"dictionary":1851,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"69ea1abb7ab1270001ede902",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"You can just build things. But should you? The build vs. buy debate in localization","build-vs-buy-in-localization-you-can-build-things-but-should-you","2026-05-25T08:43:00.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F05\u002Flocalazy-Vibe-coding.png",[1844,1846,1850],{"id":269,"created_on":1845,"status":8,"label":1830,"slug":1831,"on_index_page":17},"2026-05-28 18:02:17",{"id":1847,"created_on":1845,"status":8,"label":1848,"slug":1849,"on_index_page":15},646,"Business Development","business-development",{"id":319,"created_on":1845,"status":8,"label":217,"slug":1833,"on_index_page":17},[],{"post":1853,"relatedPosts":2040,"banner":2088},{"id":1854,"owner":1855,"created_by":7,"sort":7,"title":1860,"slug":1861,"modified_on":1862,"created_on":1863,"pinned":17,"badge":7,"priority":1824,"main_image":1864,"status":8,"tags":1865,"dictionary":1872,"reading_time":244,"excerpt":1953,"og_title":764,"og_description":764,"og_image":764,"content":1954,"meta_title":764,"meta_description":1955,"canonical":764,"cta":1956,"fullGhostPost":1963},"67d1881a63350c0001d57b91",{"id":1856,"first_name":1857,"last_name":764,"slug":1858,"avatar":1859},"60a37d0bcf7b6a0001d1eca7","Localazy Team","localazy-team","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2022\u002F11\u002FLogo-Gradient.png","Setting up i18n in your React app from day one","setting-up-i18n-in-your-react-app-from-day-one","2025-04-04T20:17:15.000+02:00","2025-04-04T18:30:58.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F04\u002Freact-i18next.png",[1866,1867,1869],{"id":319,"created_on":1845,"status":8,"label":480,"slug":479,"on_index_page":15},{"id":319,"created_on":1845,"status":8,"label":1868,"slug":1868,"on_index_page":17},"i18n",{"id":319,"created_on":1845,"status":8,"label":1870,"slug":1871,"on_index_page":15},"Guide","guide",[1873,1889,1893,1897,1906,1912,1920,1938],{"id":1874,"status":8,"owner":1875,"created_on":1876,"title":1877,"excerpt":1878,"content":1879,"slug":1880,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1881},79,"2bac48a8-b362-482f-b574-3bc71dca4c5b","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.","internationalization",[1882,1883,1885,1887],{"id":5,"slug":1833},{"id":22,"slug":1884},"translation",{"id":13,"slug":1886},"globalization",{"id":101,"slug":1888},"gilt",{"id":1250,"status":8,"owner":1875,"created_on":1890,"title":480,"excerpt":1891,"content":1891,"slug":479,"meta_title":764,"meta_description":7,"canonical":7,"related_terms":1892},"2022-03-17T12:22:55.000Z","React is a development kit written in NodeJS. It is used for building frontend components of applications. Notable apps that use React include Facebook and Netflix.\n",[],{"id":175,"status":8,"owner":1875,"created_on":1890,"title":501,"excerpt":1894,"content":1895,"slug":500,"meta_title":7,"meta_description":7,"canonical":7,"related_terms":1896},"A SDK made by Google for building natively compiled applications for mobile, web, and desktop from a single codebase.","Flutter is a software development kit by Google written in C, C++, and Dart. Flutter is used to make applications for the major mobile and desktop operating systems. It is open source, so the community can help contribute to adding new features.",[],{"id":1253,"status":8,"owner":1875,"created_on":1890,"title":487,"excerpt":1898,"content":1899,"slug":486,"meta_title":764,"meta_description":7,"canonical":7,"related_terms":1900},"Vue.js is an open-source, front-end JavaScript framework for creating web user interfaces.","You can think of Vue.js as an alternative to [Angular](\u002Fdictionary\u002Fangular) or [React](\u002Fdictionary\u002Freact). \n\nVue.js is a [JavaScript](\u002Fdictionary\u002Fjavascript) front-end framework created by Evan You. Evan created Vue.js in 2014 and still leads its development today. Along with the other core team members, he is actively developing its library and adding features to it rapidly through the efforts of many contributors.\n\nVue.js focuses on simplicity, flexibility, and performance. It can also be applied to both desktop and mobile app development, thanks to the HTML extensions and JS base working in tandem with an Electron framework.\n\n**Fun fact:** Vue.js is our favorite framework and is one of the key components in the tech stack of Localazy developers.\n\nLocalazy is fully ready to help you localize your Vue.js projects, with the help of [vue-i18n library](https:\u002F\u002Fgithub.com\u002Fkazupon\u002Fvue-i18n), sponsored by Localazy.\n\n## Related links\n[How to localize Vue.js app with vue-i18n and Localazy](\u002Fblog\u002Fhow-to-localize-vuejs-app-with-vue-i18n-and-localazy)",[1901,1902,1904],{"id":1250,"slug":479},{"id":1903,"slug":494},69,{"id":1905,"slug":514},75,{"id":1903,"status":8,"owner":1875,"created_on":1890,"title":495,"excerpt":1907,"content":1908,"slug":494,"meta_title":764,"meta_description":7,"canonical":7,"related_terms":1909},"Angular is a TypeScript-based open-source platform for building mobile and desktop web applications. ","Angular enables you to build applications that range from simple, single-developer projects to enterprise-level applications.\n\nThe Angular platform consists of:\n- a framework for building scalable web applications that consist of several individual components,\n- an extensive collection of integrated libraries that support the development of application features, including routing, forms management, and client-server communication,\n- a set of tools designed to help you write code, build software, test your work, and update your applications.\n\nGoogle designed Angular as a ground-up rewrite of AngularJS. Angular has been developed and maintained by Google developers since 2016 with help from a community of individuals and corporations. \n\nYou can learn more about Angular on the [official website](https:\u002F\u002Fangular.io\u002F).\n\nRelated links:\n[How to localize Angular app with angular-i18n and Localazy](\u002Fblog\u002Flocalize-angular-app-i18n-l10n-localazy)",[1910],{"id":1911,"slug":507},74,{"id":1913,"status":8,"owner":1875,"created_on":1890,"title":1914,"excerpt":1915,"content":1916,"slug":1917,"meta_title":7,"meta_description":7,"canonical":764,"related_terms":1918},80,"NodeJS","NodeJS is a run-time JavaScript enviroment for server-side use.","NodeJS is a run-time JavaScript envinroment for server-side use. It comes packaged with everything needed to run JavaScript on a server. It uses NPM as a package manager to add additional features. NodeJS is mainly used for creating web applications and serving websites to end-users. It is also a popular first language to learn due to it's small learning curve and its high use.\n\nYou can localize NodeJS apps using Localazy.","nodejs",[1919],{"id":1905,"slug":514},{"id":986,"status":8,"owner":1875,"created_on":1876,"title":1921,"excerpt":1922,"content":1923,"slug":1921,"meta_title":7,"meta_description":7,"canonical":7,"related_terms":1924},"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)**",[1925,1926,1927,1928,1929,1930,1933,1935],{"id":5,"slug":1833},{"id":1905,"slug":514},{"id":1874,"slug":1880},{"id":1250,"slug":479},{"id":1253,"slug":486},{"id":1931,"slug":1932},156,"next.js",{"id":1679,"slug":1934},"ruby-on-rails",{"id":1936,"slug":1937},78,"rails-i18n",{"id":244,"status":8,"owner":1875,"created_on":1939,"title":1940,"excerpt":1941,"content":1942,"slug":316,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1943},"2026-05-12T07:09:22.000Z","Machine translation (MT)","The process of translating using computational linguistics.","A machine translation engine is a software tool that translates a text from one language to another without the help of human translators.\n\nMachine translation, also known as MT, is widely used as the first round of translations and is frequently very effective for short strings. However, it can produce unsatisfactory results when context knowledge is required, and thus, a human review is always advised.\n\n### 💬 Methods used in machine translation\n\nMachine translation engines recently experienced huge improvements related to the advanced use of neural networks, but they generally rely on these different methods:\n\n* [Statistical machine translation (SMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fstatistical-machine-translation\u002F \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fstatistical-machine-translation\u002F\")\n* [Example-based machine translation (EBMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fexample-based-machine-translation \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fexample-based-machine-translation\")\n* [Hybrid machine translation (HMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fhybrid-machine-translation \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fhybrid-machine-translation\")\n* [Neural machine translation (NMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fneural-machine-translation\u002F \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fneural-machine-translation\u002F\")\n\nNeural machine translation (used by [AI-powered translation](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fai-powered-translation) engines) is the most sophisticated type of instant translation today. It uses machine learning to improve its translation capabilities. As the engine translates more text with each request, the better results it produces with time by learning. Most instant translation services use this technology.\n\n### 🔍 What's the difference between HAMT and MAHT?\n\nWithin the realm of machine translation, it’s important to distinguish between **Human-Assisted Machine Translation (HAMT)** and **Machine-Assisted Human Translation (MAHT)**:\n\n* [**Human-Assisted Machine Translation (HAMT)**](\u002Fdictionary\u002Fhuman-assisted-mt): This process involves a human reviewing translations generated by machine translation (MT) engines. It is also known as MT plus post-editing and\u002For pre-editing. The machine handles the initial translation, which is then edited by a human to improve accuracy and context. This approach is useful for projects with repetitive content and where budget or time constraints are significant.\n* [**Machine-Assisted Human Translation (MAHT)**](\u002Fdictionary\u002Fmaht): In this method, human translators use computer software to aid their work. Translators receive machine translation suggestions, but they decide how to use them. This approach allows for high translation accuracy while benefiting from features like translation glossaries and memories, which enhance the efficiency and consistency of the translation process.\n\n### 🦾 MT engines available in Localazy \n\nLocalazy users can use the most popular and advanced [MT engines](https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fmachine-translation \"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fmachine-translation\") to translate their content:\n\n* Amazon Translate (available for free)\n* Google Translate\n* DeepL\n* Azure Translator\n* OpenAI (ChatGPT), with your own API key\n\n> *Users can unlock different engines depending on the plan they buy. See our [pricing](https:\u002F\u002Flocalazy.com\u002Fpricing) and [docs](https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fadditional-mt-engines?srsltid=AfmBOoo--lURSBHDiHEoe3rYL3xSQHaZcTsl6kd7wwUYRGC-sGTTmG94 \"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fadditional-mt-engines?srsltid=AfmBOoo--lURSBHDiHEoe3rYL3xSQHaZcTsl6kd7wwUYRGC-sGTTmG94\") for more details.*\n\n### 📚 Additional resources:\n\n* [What is machine translation?](https:\u002F\u002Fwww.gala-global.org\u002Fwhat-machine-translation)\n* [History of machine translation](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHistory_of_machine_translation)",[1944,1946,1948,1950],{"id":441,"slug":1945},"maht",{"id":1681,"slug":1947},"mtpe-machine-translation-post-editing",{"id":1615,"slug":1949},"deepl",{"id":1951,"slug":1952},136,"human-assisted-mt","Building a React app? Learn how to integrate internationalization properly from the beginning to simplify localization later and avoid codebase rewrites.","\u003Cp>Most developers think setting up i18n early is unnecessary when launching with just one language. It feels like \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fmythbusters-start-localization-once-product-is-done\">something to deal with later\u003C\u002Fa>, once the product gains traction or expands to new markets.\u003C\u002Fp>\u003Cp>However, \u003Cstrong>when localization becomes necessary, the code is already full of hardcoded text\u003C\u002Fstrong>. When you try to force it, UI elements break when translations don't fit, and pluralization rules start causing unexpected issues. Fixing it at that stage can be overwhelming and time-consuming.\u003C\u002Fp>\u003Cp>This guide \u003Cstrong>walks you step by step to getting i18n right from the start\u003C\u002Fstrong>. You'll learn to choose the right tools, set up translations, handle tricky cases like pluralization and date formatting, and test multilingual readiness.\u003C\u002Fp>\u003Cblockquote>👀 Looking for a quick intro to React localization? Check out \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-localize-react-app-with-react-i18next-and-localazy?utm_source=google&amp;utm_medium=cpc&amp;utm_term&amp;campaign_id=21962905628&amp;ad_group_id=171218343013&amp;ad_id=724827034005&amp;match_type&amp;target=dsa-436256354107&amp;gad_source=1&amp;gbraid=0AAAAACP68mWHlra-J7KEz_244993KcIrm&amp;gclid=Cj0KCQjwhr6_BhD4ARIsAH1YdjCFKCopP93tkDphIzTdO5OaYaiGTjYUo3Gx90-wGM02Yok2oumv7jIaAjMMEALw_wcB\">this article\u003C\u002Fa>.\u003C\u002Fblockquote>\u003Ch2 id=\"choosing-the-right-i18n-tool\">🔦 Choosing the right i18n tool \u003Ca class=\"markdownit-header-anchor\" href=\"#choosing-the-right-i18n-tool\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Before you start implementation, it's important to choose the best tool for the job. There are many i18n libraries, but not all of them are designed for the same use cases. Some are lightweight and flexible, while others provide more structured formatting options.\u003C\u002Fp>\u003Cp>\u003Cstrong>For this guide, we will use \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fi18next?srsltid=AfmBOop8Wz_i1v80tCGl6QugFyeot758x9PRRfXReSYU8uBk9yQfyJjG\" rel=\"noopener noreferrer nofollow\">i18next\u003C\u002Fa>, as it's one of the most widely used i18n frameworks\u003C\u002Fstrong>. It \u003Ca href=\"https:\u002F\u002Fwww.i18next.com\u002Foverview\u002Fsupported-frameworks\" rel=\"noopener noreferrer nofollow\">supports multiple frontend and backend frameworks\u003C\u002Fa>, including React, Vue, Angular, Node.js, and even mobile platforms like Flutter. It also \u003Cstrong>handles pluralization, lazy loading, namespaces, and dynamic translation updates\u003C\u002Fstrong>, making it a solid choice for scalable applications.\u003C\u002Fp>\u003Cp>If you're working in React and want something more structured, \u003Ca href=\"https:\u002F\u002Fformatjs.github.io\u002Fdocs\u002Freact-intl\u002F\" rel=\"noopener noreferrer nofollow\">react-intl\u003C\u002Fa> (part of Format.js) offers built-in formatting components like \u003Ccode>&lt;FormattedNumber&gt;\u003C\u002Fcode> and \u003Ccode>&lt;FormattedDate&gt;\u003C\u002Fcode>. It also follows ICU message syntax, making pluralization and message interpolation more robust, \u003Cstrong>but it's React-only\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>When the time comes to manage the translations, \u003Cstrong>Localazy integrates with these libraries to automate updates\u003C\u002Fstrong> and allow teams to work with translators without modifying the codebase.\u003C\u002Fp>\u003Ch2 id=\"setting-up-i18n-in-a-react-project\">🧰 Setting up i18n in a React project \u003Ca class=\"markdownit-header-anchor\" href=\"#setting-up-i18n-in-a-react-project\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Now that you've chosen i18next to handle translations and Localazy to manage them, it's time to set up internationalization in your React app. This step will cover installing dependencies, setting up translation files, and integrating Localazy for translation management.\u003C\u002Fp>\u003Ch3 id=\"first-steps\">First steps \u003Ca class=\"markdownit-header-anchor\" href=\"#first-steps\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Col>\u003Cli>If you don't already have a React project, use the commands below to create a new project with \u003Ca href=\"https:\u002F\u002Fvite.dev\u002Fguide\u002F#scaffolding-your-first-vite-project\" rel=\"noopener noreferrer nofollow\">Vite\u003C\u002Fa>:\u003C\u002Fli>\u003C\u002Fol>\u003Cpre>\u003Ccode>npm create vite@latest my-i18n-app -- --template react\ncd my-i18n-app\nnpm install\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>2. Once the installation is done, run \u003Ccode>npm run dev\u003C\u002Fcode> to start the development server. This will launch your React app at \u003Ccode>http:\u002F\u002Flocalhost:5173\u002F\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>3. Next, install the required dependencies for localization:\u003C\u002Fp>\u003Cpre>\u003Ccode>npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Each of these libraries plays a specific role:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next\" rel=\"noopener noreferrer nofollow\">\u003Ccode>\u003Cstrong>i18next\u003C\u002Fstrong>\u003C\u002Fcode>\u003C\u002Fa>: The core internationalization library that handles translations, pluralization, and formatting.\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Freact-i18next\" rel=\"noopener noreferrer nofollow\">\u003Ccode>\u003Cstrong>react-i18next\u003C\u002Fstrong>\u003C\u002Fcode>\u003C\u002Fa>: A React-specific integration that allows you to use translations inside components.\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next-http-backend\" rel=\"noopener noreferrer nofollow\">\u003Ccode>\u003Cstrong>i18next-http-backend\u003C\u002Fstrong>\u003C\u002Fcode>\u003C\u002Fa>: Enables loading translation files dynamically from an external source, such as Localazy or a remote API.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next-browser-languagedetector\" rel=\"noopener noreferrer nofollow\">i18next-browser-languagedetector\u003C\u002Fa>\u003C\u002Fcode>\u003C\u002Fstrong>: Detects the user's preferred language based on browser settings and previous selections.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>4. After installing all the specified libraries, create a new file in the \u003Ccode>src\u003C\u002Fcode> folder called \u003Ccode>i18n.js\u003C\u002Fcode> and configure \u003Ccode>i18next\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport Backend from 'i18next-http-backend';\n\ni18n\n  .use(Backend)\n  .use(LanguageDetector)\n  .use(initReactI18next)\n  .init({\n    debug: true,\n    fallbackLng: 'en',\n    backend: {\n      loadPath: '\u002Flocales\u002F{{lng}}.json',\n    },\n  });\n\nexport default i18n;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This initializes i18next with support for loading translations dynamically and detecting the user's language. The \u003Ccode>fallbackLng\u003C\u002Fcode> option \u003Cstrong>makes the app default to English if a translation is missing\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>5. After setting up the \u003Ccode>i18n.js\u003C\u002Fcode> configuration file, import it into \u003Ccode>main.jsx\u003C\u002Fcode> so that the translation setup is loaded globally before your application renders. This step makes translations available to every component in your app \u003Cstrong>without requiring manual imports in each file\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>Open \u003Ccode>main.jsx\u003C\u002Fcode> and import the \u003Ccode>i18n.js\u003C\u002Fcode> file:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import React from \"react\";\nimport ReactDOM from \"react-dom\u002Fclient\";\nimport App from \".\u002FApp\";\nimport \".\u002Fi18n\"; \u002F\u002F Import the i18n configuration\n\nReactDOM.createRoot(document.getElementById(\"root\")).render(\n  &lt;React.StrictMode&gt;\n    &lt;App \u002F&gt;\n  &lt;\u002FReact.StrictMode&gt;\n);\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>By doing this, i18next is initialized before the React app renders, making translations available everywhere in your application.\u003C\u002Fp>\u003Ch3 id=\"organizing-translation-files\">Organizing translation files \u003Ca class=\"markdownit-header-anchor\" href=\"#organizing-translation-files\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>For your React project, you will notice that the configuration file in i18n.js \u003Cstrong>specifies the path from which i18next will load translations\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>Vite serves static files from the public directory, so create the following structure:\u003C\u002Fp>\u003Cpre>\u003Ccode>\n\u002Fpublic\u002Flocales\n  ├── en.json\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>For most projects, \u003Cstrong>it's better to keep all translations in one file per language \u003C\u002Fstrong>(\u003Ccode>locales\u002Fen.json\u003C\u002Fcode>, \u003Ccode>locales\u002Ffr.json\u003C\u002Fcode>). This keeps things easy to manage, avoids unnecessary fragmentation, and works well with CI\u002FCD pipelines and translation management tools.\u003C\u002Fp>\u003Cp>If your translation file starts getting too large, with hundreds or thousands of keys, \u003Cstrong>consider splitting it by feature or UI section\u003C\u002Fstrong> (e.g., \u003Ccode>auth.json\u003C\u002Fcode>, \u003Ccode>dashboard.json\u003C\u002Fcode>). However, avoid breaking it down into arbitrary categories like \"words\" or \"phrases\" that make things harder to find.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002Flocales  \n  \u002Fen  \n    common.json  \n    auth.json  \n    dashboard.json  \n  \u002Ffr  \n    common.json  \n    auth.json  \n    dashboard.json  \u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Since you'll be using Localazy to manage translations, \u003Cstrong>you only need to create the English (source) translations\u003C\u002Fstrong>. You don't need to manually add multiple language files immediately, as Localazy will help you manage and pull other languages automatically when needed.\u003C\u002Fp>\u003Cp>This is especially useful when setting up a project that doesn't require localization yet. Once additional languages are needed, you simply sync them with Localazy without changing the app's core functionality. \u003C\u002Fp>\u003Cp>Beyond file structure, \u003Cstrong>how you name your keys also plays a big role\u003C\u002Fstrong> in keeping your translations manageable.\u003C\u002Fp>\u003Ch3 id=\"naming-your-translation-keys\">Naming your translation keys \u003Ca class=\"markdownit-header-anchor\" href=\"#naming-your-translation-keys\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>How you structure translation keys makes a huge difference in readability and maintainability. A common mistake is using flat or unclear keys like this:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">{\n  \"news_title\": \"Latest News\",\n  \"article_title\": \"React 19 Is Coming!\",\n  \"article_content\": \"The next major version of React is set to release with improved performance, new hooks, and better server-side rendering.\",\n  \"learn_more\": \"To learn more, visit &lt;1&gt;React docs&lt;\u002F1&gt;.\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>At first glance, this structure might seem simple, but \u003Cstrong>it becomes difficult to maintain as your app grows\u003C\u002Fstrong>. There's no clear hierarchy, making it harder to find and organize translations. If a new feature related to news articles is added, it would be unclear how to fit the translations into this structure without creating long and repetitive key names (e.g., \u003Ccode>\"news_page_article_title\"\u003C\u002Fcode>).\u003C\u002Fp>\u003Cp>A better approach is to group related translations together in a hierarchical structure:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">{\n  \"news\": {\n    \"title\": \"Latest News\",\n    \"article\": {\n      \"title\": \"React 19 Is Coming!\",\n      \"content\": \"The next major version of React is set to release with improved performance, new hooks, and better server-side rendering.\"\n    },\n  },\n  \"instructions\": \"To learn more, visit &lt;1&gt;React docs&lt;\u002F1&gt;.\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Now, every translation key has context. Add the initial translations above in the en.json file.\u003C\u002Fp>\u003Ch3 id=\"updating-appjsx-to-use-translations\">Updating App.jsx to use translations \u003Ca class=\"markdownit-header-anchor\" href=\"#updating-appjsx-to-use-translations\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>At this point, your application is set up to load translations dynamically. Modify App.jsx to display translations using \u003Ccode>useTranslation\u003C\u002Fcode> from \u003Ccode>react-i18next\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import { Suspense } from \"react\";\nimport \".\u002FApp.css\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nfunction App() {\n  const { t, i18n } = useTranslation();\n\n  return (\n    &lt;div className=\"App\"&gt;\n      &lt;h1&gt;{t(\"news.title\")}&lt;\u002Fh1&gt;\n      &lt;article&gt;\n        &lt;h2&gt;{t(\"news.article.title\")}&lt;\u002Fh2&gt;\n        &lt;p&gt;{t(\"news.article.content\")}&lt;\u002Fp&gt;\n      &lt;\u002Farticle&gt;\n      &lt;p&gt;\n        &lt;Trans i18nKey=\"instructions\"&gt;\n          To learn more, visit &lt;a href=\"https:\u002F\u002Freactjs.org\"&gt;React docs&lt;\u002Fa&gt;.\n        &lt;\u002FTrans&gt;\n      &lt;\u002Fp&gt;\n    &lt;\u002Fdiv&gt;\n  );\n\nexport default function WrappedApp() {\n  return (\n    &lt;Suspense fallback=\"...loading translations\"&gt;\n      &lt;App \u002F&gt;\n    &lt;\u002FSuspense&gt;\n  );\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Here, \u003Ccode>t(\"key\")\u003C\u002Fcode> fetches translations from the JSON file. This is the standard way of retrieving localized text for headings, paragraphs, and other UI elements.\u003C\u002Fp>\u003Cp>For cases where translations contain HTML elements, such as links inside sentences, you can use \u003Ccode>&lt;Trans&gt;\u003C\u002Fcode>. This allows JSX elements like \u003Ccode>&lt;a&gt;\u003C\u002Fcode> to be preserved inside translations without requiring developers to split and concatenate strings manually. \u003Cstrong>This is particularly useful when working with non-developers or external translation teams, as it keeps the translation files clean and structured\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>Since i18next loads translations asynchronously, it's essential to wrap the app in \u003Ccode>&lt;Suspense&gt;\u003C\u002Fcode> to make sure it does not break while translations are being retrieved. If translations take a moment to load, the placeholder \u003Ccode>\"...loading translations\"\u003C\u002Fcode> will be displayed instead of showing an empty screen or broken text.\u003C\u002Fp>\u003Ch3 id=\"handling-dynamic-text\">Handling dynamic text \u003Ca class=\"markdownit-header-anchor\" href=\"#handling-dynamic-text\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Before getting into how Localazy handles translations, let's see how to manage dynamic text properly in i18n.\u003C\u002Fp>\u003Cp>A common mistake developers make is \u003Cstrong>manually concatenating strings when inserting \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fvariables\u002F\">variables\u003C\u002Fa>\u003C\u002Fstrong> like usernames or numbers:\u003C\u002Fp>\u003Cpre>\u003Ccode>const { t } = useTranslation();\nconst username = \"David\";\n\nreturn &lt;p&gt;{t(\"hello\")} {username}!&lt;\u002Fp&gt;;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>If the translation file contains:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"hello\": \"Hello\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>It works fine in English but breaks in languages with different sentence structures. For example, in Spanish, a greeting might be:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"hello\": \"¡Hola, {{name}}!\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>So, instead of concatenating, use placeholders inside the translation file:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"news\": {\n    \"title\": \"Latest News\",\n    \"articles\": {\n      \"react19\": {\n        \"title\": \"React 19 Is Coming!\",\n        \"content\": \"The next major version of React is set to release with improved performance, new hooks, and better server-side rendering.\"\n      }\n    }\n  },\n  \"greetings\": {\n    \"hello_user\": \"Hello, {{name}}! Welcome back to the latest news.\"\n  },\n  \"instructions\": \"To learn more, visit &lt;1&gt;React docs&lt;\u002F1&gt;.\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Then, in your component:\u003C\u002Fp>\u003Cpre>\u003Ccode>const { t } = useTranslation();\nconst username = \"David\";\n\nreturn &lt;p&gt;{t(\"greetings.hello_user\", { name: username })}&lt;\u002Fp&gt;;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This keeps translations flexible and grammatically correct across all languages.\u003C\u002Fp>\u003Ch2 id=\"integrating-localazy-for-translation-management\">🥣 Integrating Localazy for translation management \u003Ca class=\"markdownit-header-anchor\" href=\"#integrating-localazy-for-translation-management\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Instead of manually creating and updating translation files, you can use Localazy to handle translations more efficiently. You'll just need to upload your source language files, translate them through the platform, and then pull the translated content into your project. This way, \u003Cstrong>you can add new languages without editing translation files directly.\u003C\u002Fstrong>\u003C\u002Fp>\u003Ch3 id=\"the-process\">The process \u003Ca class=\"markdownit-header-anchor\" href=\"#the-process\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Col>\u003Cli>First, install the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\" rel=\"noopener noreferrer nofollow\">Localazy CLI\u003C\u002Fa>, which helps you sync translations between your project and the platform.\u003C\u002Fli>\u003C\u002Fol>\u003Cp>\u003Ccode>npm install -g @localazy\u002Fcli\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>The command above installs Localazy globally so you can use it anywhere in your terminal.\u003C\u002Fp>\u003Cp>2. Next, you need to create a \u003Ccode>localazy.json\u003C\u002Fcode> file in the root of your project. This file defines which translation files to upload, the source language, and where to store downloaded translations. Instead of specifying just one file, \u003Cstrong>you can configure it to handle multiple files using an array\u003C\u002Fstrong>, which is useful for projects with structured translation files.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">{\n  \"writeKey\": \"YOUR_WRITE_KEY_HERE\",\n  \"readKey\": \"YOUR_READ_KEY_HERE\",\n  \"upload\": {\n    \"files\": [\n      \"public\u002Flocales\u002Fen.json\",\n      {\n        \"pattern\": \"public\u002Flocales\u002F*.json\"\n      }\n    ],\n    \"language\": \"en\"\n  },\n  \"download\": {\n    \"files\": \"public\u002Flocales\u002F${lang}.json\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This setup ensures that all JSON translation files inside public\u002Flocales\u002F \u003Cstrong>are automatically uploaded rather than needing to specify each file manually\u003C\u002Fstrong>. If the project grows and you introduce namespaced translation files at some point (e.g., separate files for authentication, dashboard, or settings), Localazy will handle them without extra configuration.\u003C\u002Fp>\u003Cp>3. Now that Localazy is configured, \u003Cstrong>upload your source keys\u003C\u002Fstrong> to make them available for translation via \u003Ccode>localazy upload\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>This command sends \u003Ccode>public\u002Flocales\u002Fen.json\u003C\u002Fcode> to Localazy, where translators, team members, or machine translation tools can begin adding translations.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754792582_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Uploading source translations to Localazy.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>4. Once the upload is complete, \u003Cstrong>you can proceed to add new languages\u003C\u002Fstrong>. Localazy provides several ways to translate content:\u003C\u002Fp>\u003Cul>\u003Cli>📝 \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Ftranslating-strings\">Manually enter translations\u003C\u002Fa> for each language.\u003C\u002Fli>\u003Cli>🦾 Use \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fmachine-translation\u002F\">automatic machine translation\u003C\u002Fa> to generate translations instantly.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>To apply MT, select the language you want to translate into and click the machine translation option.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754406765_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Selecting a language for machine translation.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>Then, choose your preferred translation service and click \u003Cstrong>Confirm\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754463226_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Choosing a machine translation service.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>5. When the texts are translated, \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Freviewing-translations\">you can review them\u003C\u002Fa> to verify their accuracy \u003C\u002Fstrong>before confirming them and downloading them into your project with \u003Ccode>localazy download\u003C\u002Fcode>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754846108_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Reviewing machine-translated content.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>This pulls all available translations from Localazy and places them in the \u003Ccode>\u002Fpublic\u002Flocales\u002F\u003C\u002Fcode> directory. If French (\u003Ccode>fr\u003C\u002Fcode>) and German (\u003Ccode>de\u003C\u002Fcode>) translations exist, the directory structure will now look like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002Fpublic\u002Flocales\n  ├── en.json\n  ├── fr.json\n  ├── de.json\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>At this point, \u003Ccode>i18next\u003C\u002Fcode> will automatically detect the user's preferred language \u003Cstrong>and load the correct translations without additional configuration\u003C\u002Fstrong>.\u003C\u002Fp>\u003Ch2 id=\"how-to-switch-between-languages\">💬 How to switch between languages \u003Ca class=\"markdownit-header-anchor\" href=\"#how-to-switch-between-languages\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Now that your app supports multiple languages, you need a way for users to switch between them. Since i18next handles language changes dynamically, you can simply update the language setting when a user selects a different language.\u003C\u002Fp>\u003Cp>Modify \u003Ccode>App.jsx\u003C\u002Fcode> to include language-switching buttons:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">\nimport { Suspense } from \"react\";\nimport \".\u002FApp.css\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nconst lngs = {\n  en: { nativeName: \"English\" },\n  fr: { nativeName: \"French\" },\n  de: { nativeName: \"German\" },\n};\n\nfunction App() {\n  const { t, i18n } = useTranslation();\n\n  return (\n    &lt;div className=\"App\"&gt;\n      &lt;h1&gt;{t(\"news.title\")}&lt;\u002Fh1&gt;\n      &lt;div&gt;\n        {Object.keys(lngs).map((lng) =&gt; (\n          &lt;button\n            key={lng}\n            style={{ fontWeight: i18n.resolvedLanguage === lng ? \"bold\" : \"normal\" }}\n            type=\"button\"\n            onClick={() =&gt; i18n.changeLanguage(lng)}\n          &gt;\n            {lngs[lng].nativeName}\n          &lt;\u002Fbutton&gt;\n        ))}\n      &lt;\u002Fdiv&gt;\n      &lt;article&gt;\n        &lt;h2&gt;{t(\"news.article.title\")}&lt;\u002Fh2&gt;\n        &lt;p&gt;{t(\"news.article.content\")}&lt;\u002Fp&gt;\n      &lt;\u002Farticle&gt;\n      &lt;p&gt;\n        &lt;Trans i18nKey=\"instructions\"&gt;\n          To learn more, visit &lt;a href=\"https:\u002F\u002Freactjs.org\"&gt;React docs&lt;\u002Fa&gt;.\n        &lt;\u002FTrans&gt;\n      &lt;\u002Fp&gt;\n    &lt;\u002Fdiv&gt;\n  );\n}\n\nexport default function WrappedApp() {\n  return (\n    &lt;Suspense fallback=\"...loading translations\"&gt;\n      &lt;App \u002F&gt;\n    &lt;\u002FSuspense&gt;\n  );\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the code above, an object stores the available language options and is looped through to generate buttons dynamically. \u003Cstrong>When a user clicks a button, \u003Ccode>i18n.changeLanguage(lng)\u003C\u002Fcode> updates the language instantly\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739777253108_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003C\u002Ffigure>\u003Ch2 id=\"handling-pluralization-and-date-formatting\">🎲 Handling pluralization and date formatting \u003Ca class=\"markdownit-header-anchor\" href=\"#handling-pluralization-and-date-formatting\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fpluralization\">Pluralization\u003C\u002Fa> and date formatting can vary significantly across languages. While i18next can automatically handle pluralization in many cases, you often need to integrate additional tools or plugins like ICU or Luxon for more complex scenarios or date formatting.\u003C\u002Fp>\u003Cp>Next, you'll learn how to handle both properly in a React project.\u003C\u002Fp>\u003Ch3 id=\"pluralization-with-i18next\">Pluralization with i18next \u003Ca class=\"markdownit-header-anchor\" href=\"#pluralization-with-i18next\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>\u003Cstrong>i18next can determine the correct plural form\u003C\u002Fstrong> based on the language's grammar rules \u003Cstrong>if your keys are structured correctly\u003C\u002Fstrong>. For example, here's a simple pluralization case in the \u003Ccode>en.json\u003C\u002Fcode> translation file:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"news\": {\n    \"articlesRead_one\": \"You have read one article.\",\n    \"articlesRead_other\": \"You have read {{count}} articles.\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the React component, \u003Ccode>t()\u003C\u002Fcode> is then used to retrieve the appropriate translation based on the count:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;p&gt;{t(\"news.articlesRead\", { count: 1 })}&lt;\u002Fp&gt;  \u002F\u002F \"You have read one article.\"\n&lt;p&gt;{t(\"news.articlesRead\", { count: 5 })}&lt;\u002Fp&gt; \u002F\u002F \"You have read 5 articles.\"\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Here, i18next automatically picks the correct plural form ( \u003Ccode>_one\u003C\u002Fcode> or \u003Ccode>_other\u003C\u002Fcode> ) based on the count passed. This works fine for languages that only have two plural forms (singular and plural), like English.\u003C\u002Fp>\u003Cp>However, some languages have more than two plural forms, making it difficult to rely on the default _one and _other keys. For example, languages like Russian and Arabic have additional plural forms for different quantities, such as \u003Cstrong>few, many, or other\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>You can use \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ficu\">ICU\u003C\u002Fa> message syntax to handle languages with more than two plural forms. \u003Cstrong>This allows you to define all plural forms in a single key and let i18next choose the correct form dynamically\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>First, install the \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next-icu\" rel=\"noopener noreferrer nofollow\">i18next-icu\u003C\u002Fa> plugin, which enables ICU syntax support in i18next:\u003C\u002Fp>\u003Cp>\u003Ccode>npm install i18next-icu\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>In the \u003Ccode>i18n.js\u003C\u002Fcode> file, use the ICU plugin by adding it to the i18next initialization:\u003C\u002Fp>\u003Cpre>\u003Ccode>import ICU from \"i18next-icu\";\n\ni18n.use(ICU).init({\n  fallbackLng: \"en\",\n  debug: true\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Instead of defining separate keys for \u003Ccode>_one\u003C\u002Fcode> and \u003Ccode>_other\u003C\u002Fcode>, you now use ICU message syntax to handle pluralization. This makes it easier to manage languages with more plural forms:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"news\": {\n    \"articlesRead\": \"You have read {count, plural, one {one article} other {# articles}}.\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The React component remains the same, but\u003Cstrong> i18next will now automatically handle plural forms based on the user's language\u003C\u002Fstrong>.\u003C\u002Fp>\u003Ch3 id=\"date-formatting-with-luxon\">Date formatting with Luxon \u003Ca class=\"markdownit-header-anchor\" href=\"#date-formatting-with-luxon\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Just like pluralization, date formats differ across regions. While JavaScript's \u003Ccode>Intl.DateTimeFormat\u003C\u002Fcode> can handle basic date formatting, \u003Ca href=\"https:\u002F\u002Fmoment.github.io\u002Fluxon\u002F#\u002F\" rel=\"noopener noreferrer nofollow\">Luxon\u003C\u002Fa> is used in this article because it provides better control over formatting, time zones, and locale-based adjustments.\u003C\u002Fp>\u003Cp>To use Luxon, install it in your project:\u003Ccode>npm install luxon\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>Next, add a custom \"formatter\" in i18n.js to use Luxon for date formatting. Here's how to do it:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import { DateTime } from 'luxon'; \n\n\u002F\u002F other config\n\ni18n.services.formatter.add('DATE_HUGE', (value, lng, options) =&gt; {\n  return DateTime.fromJSDate(value)\n    .setLocale(lng)\n    .toLocaleString(DateTime.DATE_MED);\n});\n\nexport default i18n;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You can now use the custom date format in your translation file:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"footer\": {\n    \"date\": \"Today is {{date, DATE_HUGE}}\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the component, use \u003Ccode>t()\u003C\u002Fcode> to inject the current date into the translation:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;footer&gt;\n  &lt;p&gt;{t(\"footer.date\", { date: new Date() })}&lt;\u002Fp&gt;\n&lt;\u002Ffooter&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Luxon will automatically handle the localization of the date format, making sure it displays correctly in the user's preferred language.\u003C\u002Fp>\u003Ch2 id=\"testing-for-multilingual-readiness\">🔍 Testing for multilingual readiness \u003Ca class=\"markdownit-header-anchor\" href=\"#testing-for-multilingual-readiness\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Proper internationalization of your application involves more than adding translations. It also involves testing to prevent broken translations, missing keys, layout issues, and incorrect pluralization or date formatting.\u003C\u002Fp>\u003Cp>\u003Cstrong>One of the most common issues in i18n is missing translations\u003C\u002Fstrong>. i18next provides a built-in way to log missing translations, but you can take it a step further by\u003Cstrong> automating the detection process\u003C\u002Fstrong>. To log missing translations in the console, update \u003Ccode>i18n.js\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">i18n.init({\n  fallbackLng: \"en\",\n  debug: true,  \u002F\u002F Enable debug mode\n  saveMissing: true, \u002F\u002F Logs missing keys in development\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Now, if a translation is missing, i18next will log a warning like this:\u003C\u002Fp>\u003Cp>\u003Ccode>i18next::translator: missingKey en translation news.articleTitle\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>This helps you catch missing keys during development before they become a problem in production. However, instead of manually checking logs, you can write a Jest test to confirm that all English translations exist in en.json:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import i18n from \"..\u002Fsrc\u002Fi18n\";\nimport en from \"..\u002Fpublic\u002Flocales\u002Fen.json\";\n\ntest(\"All English translations exist\", () =&gt; {\n  Object.keys(en).forEach((key) =&gt; {\n    expect(i18n.t(key)).not.toBe(key); \u002F\u002F If t(key) returns the key itself, it's missing\n  });\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>For this test to work, install \u003Ca href=\"https:\u002F\u002Fjestjs.io\u002F\" rel=\"noopener noreferrer nofollow\">Jest\u003C\u002Fa> and related testing libraries if you haven't already:\u003C\u002Fp>\u003Cp>\u003Ccode>npm install --save-dev jest @testing-library\u002Freact @testing-library\u002Fjest-dom\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>\u003Cstrong>With Jest set up, you can also test pluralization rules\u003C\u002Fstrong> to ensure they always return the correct form. If a translation is missing or incorrectly structured, the test will fail.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">test(\"Pluralization works correctly\", () =&gt; {\n  expect(i18n.t(\"news.articlesRead\", { count: 1 })).toBe(\"You have read one article.\");\n  expect(i18n.t(\"news.articlesRead\", { count: 5 })).toBe(\"You have read 5 articles.\");\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Another important check is \u003Cstrong>making sure that language switching updates the UI correctly\u003C\u002Fstrong>. Using \u003Ca href=\"https:\u002F\u002Ftesting-library.com\u002Fdocs\u002Freact-testing-library\u002Fintro\" rel=\"noopener noreferrer nofollow\">React Testing Library\u003C\u002Fa>, you can simulate a user changing languages and verify that the correct translations appear.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import { render, screen, act } from \"@testing-library\u002Freact\";\nimport App from \"..\u002Fsrc\u002FApp\";\nimport i18n from \"..\u002Fsrc\u002Fi18n\";\n\ntest(\"Switching language updates translations\", async () =&gt; {\n  render(&lt;App \u002F&gt;);\n  \n  expect(screen.getByText(\"Latest News\")).toBeInTheDocument(); \u002F\u002F English by default\n\n  await act(() =&gt; i18n.changeLanguage(\"fr\"));\n\n  expect(screen.getByText(\"Dernières Nouvelles\")).toBeInTheDocument(); \u002F\u002F French translation appears\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This confirms that translations update correctly when the user changes the language.\u003C\u002Fp>\u003Cp>To prevent i18n issues from reaching production, \u003Cstrong>these tests should be integrated into \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions\" rel=\"noopener noreferrer nofollow\">GitHub Actions\u003C\u002Fa> or another CI\u002FCD pipeline\u003C\u002Fstrong>. In GitHub Actions, update .github\u002Fworkflows\u002Ftests.yml to include i18n tests:\u003C\u002Fp>\u003Cpre>\u003Ccode>jobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v3\n      - run: npm install\n      - run: npm test\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>If any i18n test fails, the build stops, preventing broken translations from reaching users.\u003C\u002Fp>\u003Ch2 id=\"final-thoughts\">✔️ Final thoughts \u003Ca class=\"markdownit-header-anchor\" href=\"#final-thoughts\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>\u003Cstrong>Internationalization should be part of your development process from the start and not something that's added later\u003C\u002Fstrong>. ☝️ Setting it up early saves time and avoids messy rewrites when you scale and need to support more languages.\u003C\u002Fp>\u003Cp>To keep translations up to date, use CI\u002FCD to sync with a translation management system like Localazy. This way, new keys are pushed automatically, and updated translations are pulled without manual effort.\u003C\u002Fp>\u003Cp>Since i18next loads translations dynamically, adding a new language is as simple as enabling it in Localazy. Once synced, the translations will be available in your app without changing any code. \u003Cstrong>With this setup, scaling to new markets is just a matter of adding translations, not rebuilding your project\u003C\u002Fstrong>.\u003C\u002Fp>","Building a React app? Learn how to integrate i18n properly from the beginning to simplify localization later.",{"id":13,"status":8,"created_on":1957,"modified_on":1958,"icon":1959,"header":1960,"description":1961,"button_label":1962,"link":479},"2022-03-17T12:23:03.000Z","2025-04-04T16:30:30.000Z","app","React i18n done right with Localazy","Make your React app international in a few steps! Enjoy improved plural support, placeholder detection, and a variety of CI\u002FCD options — all in the same platform.","See React integration",{"slug":1861,"id":1854,"uuid":1964,"title":1860,"html":1965,"comment_id":1854,"feature_image":1864,"featured":17,"visibility":1966,"email_recipient_filter":1967,"created_at":1968,"updated_at":1862,"published_at":1863,"custom_excerpt":1953,"codeinjection_head":7,"codeinjection_foot":7,"custom_template":7,"canonical_url":7,"authors":1969,"tags":1975,"primary_author":2037,"primary_tag":2038,"url":2039,"excerpt":1953,"reading_time":244,"access":17,"send_email_when_published":15,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":1955,"email_subject":7,"frontmatter":7,"dictionary":1872,"cta":1956,"plainTags":1865},"0dfe5f9f-3996-4b97-83fa-db14ee02c5e7","\u003Cp>Most developers think setting up i18n early is unnecessary when launching with just one language. It feels like \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fmythbusters-start-localization-once-product-is-done\">something to deal with later\u003C\u002Fa>, once the product gains traction or expands to new markets.\u003C\u002Fp>\u003Cp>However, \u003Cstrong>when localization becomes necessary, the code is already full of hardcoded text\u003C\u002Fstrong>. When you try to force it, UI elements break when translations don't fit, and pluralization rules start causing unexpected issues. Fixing it at that stage can be overwhelming and time-consuming.\u003C\u002Fp>\u003Cp>This guide \u003Cstrong>walks you step by step to getting i18n right from the start\u003C\u002Fstrong>. You'll learn to choose the right tools, set up translations, handle tricky cases like pluralization and date formatting, and test multilingual readiness.\u003C\u002Fp>\u003Cblockquote>👀 Looking for a quick intro to React localization? Check out \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-localize-react-app-with-react-i18next-and-localazy?utm_source=google&amp;utm_medium=cpc&amp;utm_term&amp;campaign_id=21962905628&amp;ad_group_id=171218343013&amp;ad_id=724827034005&amp;match_type&amp;target=dsa-436256354107&amp;gad_source=1&amp;gbraid=0AAAAACP68mWHlra-J7KEz_244993KcIrm&amp;gclid=Cj0KCQjwhr6_BhD4ARIsAH1YdjCFKCopP93tkDphIzTdO5OaYaiGTjYUo3Gx90-wGM02Yok2oumv7jIaAjMMEALw_wcB\">this article\u003C\u002Fa>.\u003C\u002Fblockquote>\u003Ch2 id=\"%F0%9F%94%A6-choosing-the-right-i18n-tool\">🔦 Choosing the right i18n tool\u003C\u002Fh2>\u003Cp>Before you start implementation, it's important to choose the best tool for the job. There are many i18n libraries, but not all of them are designed for the same use cases. Some are lightweight and flexible, while others provide more structured formatting options.\u003C\u002Fp>\u003Cp>\u003Cstrong>For this guide, we will use \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fi18next?srsltid=AfmBOop8Wz_i1v80tCGl6QugFyeot758x9PRRfXReSYU8uBk9yQfyJjG\" rel=\"noopener noreferrer nofollow\">i18next\u003C\u002Fa>, as it's one of the most widely used i18n frameworks\u003C\u002Fstrong>. It \u003Ca href=\"https:\u002F\u002Fwww.i18next.com\u002Foverview\u002Fsupported-frameworks\" rel=\"noopener noreferrer nofollow\">supports multiple frontend and backend frameworks\u003C\u002Fa>, including React, Vue, Angular, Node.js, and even mobile platforms like Flutter. It also \u003Cstrong>handles pluralization, lazy loading, namespaces, and dynamic translation updates\u003C\u002Fstrong>, making it a solid choice for scalable applications.\u003C\u002Fp>\u003Cp>If you're working in React and want something more structured, \u003Ca href=\"https:\u002F\u002Fformatjs.github.io\u002Fdocs\u002Freact-intl\u002F\" rel=\"noopener noreferrer nofollow\">react-intl\u003C\u002Fa> (part of Format.js) offers built-in formatting components like \u003Ccode>&lt;FormattedNumber&gt;\u003C\u002Fcode> and \u003Ccode>&lt;FormattedDate&gt;\u003C\u002Fcode>. It also follows ICU message syntax, making pluralization and message interpolation more robust, \u003Cstrong>but it's React-only\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>When the time comes to manage the translations, \u003Cstrong>Localazy integrates with these libraries to automate updates\u003C\u002Fstrong> and allow teams to work with translators without modifying the codebase.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%A7%B0-setting-up-i18n-in-a-react-project\">🧰 Setting up i18n in a React project\u003C\u002Fh2>\u003Cp>Now that you've chosen i18next to handle translations and Localazy to manage them, it's time to set up internationalization in your React app. This step will cover installing dependencies, setting up translation files, and integrating Localazy for translation management.\u003C\u002Fp>\u003Ch3 id=\"first-steps\">First steps\u003C\u002Fh3>\u003Col>\u003Cli>If you don't already have a React project, use the commands below to create a new project with \u003Ca href=\"https:\u002F\u002Fvite.dev\u002Fguide\u002F#scaffolding-your-first-vite-project\" rel=\"noopener noreferrer nofollow\">Vite\u003C\u002Fa>:\u003C\u002Fli>\u003C\u002Fol>\u003Cpre>\u003Ccode>npm create vite@latest my-i18n-app -- --template react\ncd my-i18n-app\nnpm install\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>2. Once the installation is done, run \u003Ccode>npm run dev\u003C\u002Fcode> to start the development server. This will launch your React app at \u003Ccode>http:\u002F\u002Flocalhost:5173\u002F\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>3. Next, install the required dependencies for localization:\u003C\u002Fp>\u003Cpre>\u003Ccode>npm install i18next react-i18next i18next-http-backend i18next-browser-languagedetector\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Each of these libraries plays a specific role:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next\" rel=\"noopener noreferrer nofollow\">\u003Ccode>\u003Cstrong>i18next\u003C\u002Fstrong>\u003C\u002Fcode>\u003C\u002Fa>: The core internationalization library that handles translations, pluralization, and formatting.\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Freact-i18next\" rel=\"noopener noreferrer nofollow\">\u003Ccode>\u003Cstrong>react-i18next\u003C\u002Fstrong>\u003C\u002Fcode>\u003C\u002Fa>: A React-specific integration that allows you to use translations inside components.\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next-http-backend\" rel=\"noopener noreferrer nofollow\">\u003Ccode>\u003Cstrong>i18next-http-backend\u003C\u002Fstrong>\u003C\u002Fcode>\u003C\u002Fa>: Enables loading translation files dynamically from an external source, such as Localazy or a remote API.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next-browser-languagedetector\" rel=\"noopener noreferrer nofollow\">i18next-browser-languagedetector\u003C\u002Fa>\u003C\u002Fcode>\u003C\u002Fstrong>: Detects the user's preferred language based on browser settings and previous selections.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>4. After installing all the specified libraries, create a new file in the \u003Ccode>src\u003C\u002Fcode> folder called \u003Ccode>i18n.js\u003C\u002Fcode> and configure \u003Ccode>i18next\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport Backend from 'i18next-http-backend';\n\ni18n\n  .use(Backend)\n  .use(LanguageDetector)\n  .use(initReactI18next)\n  .init({\n    debug: true,\n    fallbackLng: 'en',\n    backend: {\n      loadPath: '\u002Flocales\u002F{{lng}}.json',\n    },\n  });\n\nexport default i18n;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This initializes i18next with support for loading translations dynamically and detecting the user's language. The \u003Ccode>fallbackLng\u003C\u002Fcode> option \u003Cstrong>makes the app default to English if a translation is missing\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>5. After setting up the \u003Ccode>i18n.js\u003C\u002Fcode> configuration file, import it into \u003Ccode>main.jsx\u003C\u002Fcode> so that the translation setup is loaded globally before your application renders. This step makes translations available to every component in your app \u003Cstrong>without requiring manual imports in each file\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>Open \u003Ccode>main.jsx\u003C\u002Fcode> and import the \u003Ccode>i18n.js\u003C\u002Fcode> file:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import React from \"react\";\nimport ReactDOM from \"react-dom\u002Fclient\";\nimport App from \".\u002FApp\";\nimport \".\u002Fi18n\"; \u002F\u002F Import the i18n configuration\n\nReactDOM.createRoot(document.getElementById(\"root\")).render(\n  &lt;React.StrictMode&gt;\n    &lt;App \u002F&gt;\n  &lt;\u002FReact.StrictMode&gt;\n);\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>By doing this, i18next is initialized before the React app renders, making translations available everywhere in your application.\u003C\u002Fp>\u003Ch3 id=\"organizing-translation-files\">Organizing translation files\u003C\u002Fh3>\u003Cp>For your React project, you will notice that the configuration file in i18n.js \u003Cstrong>specifies the path from which i18next will load translations\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>Vite serves static files from the public directory, so create the following structure:\u003C\u002Fp>\u003Cpre>\u003Ccode>\n\u002Fpublic\u002Flocales\n  ├── en.json\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>For most projects, \u003Cstrong>it's better to keep all translations in one file per language \u003C\u002Fstrong>(\u003Ccode>locales\u002Fen.json\u003C\u002Fcode>, \u003Ccode>locales\u002Ffr.json\u003C\u002Fcode>). This keeps things easy to manage, avoids unnecessary fragmentation, and works well with CI\u002FCD pipelines and translation management tools.\u003C\u002Fp>\u003Cp>If your translation file starts getting too large, with hundreds or thousands of keys, \u003Cstrong>consider splitting it by feature or UI section\u003C\u002Fstrong> (e.g., \u003Ccode>auth.json\u003C\u002Fcode>, \u003Ccode>dashboard.json\u003C\u002Fcode>). However, avoid breaking it down into arbitrary categories like \"words\" or \"phrases\" that make things harder to find.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002Flocales  \n  \u002Fen  \n    common.json  \n    auth.json  \n    dashboard.json  \n  \u002Ffr  \n    common.json  \n    auth.json  \n    dashboard.json  \u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Since you'll be using Localazy to manage translations, \u003Cstrong>you only need to create the English (source) translations\u003C\u002Fstrong>. You don't need to manually add multiple language files immediately, as Localazy will help you manage and pull other languages automatically when needed.\u003C\u002Fp>\u003Cp>This is especially useful when setting up a project that doesn't require localization yet. Once additional languages are needed, you simply sync them with Localazy without changing the app's core functionality. \u003C\u002Fp>\u003Cp>Beyond file structure, \u003Cstrong>how you name your keys also plays a big role\u003C\u002Fstrong> in keeping your translations manageable.\u003C\u002Fp>\u003Ch3 id=\"naming-your-translation-keys\">Naming your translation keys\u003C\u002Fh3>\u003Cp>How you structure translation keys makes a huge difference in readability and maintainability. A common mistake is using flat or unclear keys like this:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">{\n  \"news_title\": \"Latest News\",\n  \"article_title\": \"React 19 Is Coming!\",\n  \"article_content\": \"The next major version of React is set to release with improved performance, new hooks, and better server-side rendering.\",\n  \"learn_more\": \"To learn more, visit &lt;1&gt;React docs&lt;\u002F1&gt;.\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>At first glance, this structure might seem simple, but \u003Cstrong>it becomes difficult to maintain as your app grows\u003C\u002Fstrong>. There's no clear hierarchy, making it harder to find and organize translations. If a new feature related to news articles is added, it would be unclear how to fit the translations into this structure without creating long and repetitive key names (e.g., \u003Ccode>\"news_page_article_title\"\u003C\u002Fcode>).\u003C\u002Fp>\u003Cp>A better approach is to group related translations together in a hierarchical structure:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">{\n  \"news\": {\n    \"title\": \"Latest News\",\n    \"article\": {\n      \"title\": \"React 19 Is Coming!\",\n      \"content\": \"The next major version of React is set to release with improved performance, new hooks, and better server-side rendering.\"\n    },\n  },\n  \"instructions\": \"To learn more, visit &lt;1&gt;React docs&lt;\u002F1&gt;.\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Now, every translation key has context. Add the initial translations above in the en.json file.\u003C\u002Fp>\u003Ch3 id=\"updating-appjsx-to-use-translations\">Updating App.jsx to use translations\u003C\u002Fh3>\u003Cp>At this point, your application is set up to load translations dynamically. Modify App.jsx to display translations using \u003Ccode>useTranslation\u003C\u002Fcode> from \u003Ccode>react-i18next\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import { Suspense } from \"react\";\nimport \".\u002FApp.css\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nfunction App() {\n  const { t, i18n } = useTranslation();\n\n  return (\n    &lt;div className=\"App\"&gt;\n      &lt;h1&gt;{t(\"news.title\")}&lt;\u002Fh1&gt;\n      &lt;article&gt;\n        &lt;h2&gt;{t(\"news.article.title\")}&lt;\u002Fh2&gt;\n        &lt;p&gt;{t(\"news.article.content\")}&lt;\u002Fp&gt;\n      &lt;\u002Farticle&gt;\n      &lt;p&gt;\n        &lt;Trans i18nKey=\"instructions\"&gt;\n          To learn more, visit &lt;a href=\"https:\u002F\u002Freactjs.org\"&gt;React docs&lt;\u002Fa&gt;.\n        &lt;\u002FTrans&gt;\n      &lt;\u002Fp&gt;\n    &lt;\u002Fdiv&gt;\n  );\n\nexport default function WrappedApp() {\n  return (\n    &lt;Suspense fallback=\"...loading translations\"&gt;\n      &lt;App \u002F&gt;\n    &lt;\u002FSuspense&gt;\n  );\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Here, \u003Ccode>t(\"key\")\u003C\u002Fcode> fetches translations from the JSON file. This is the standard way of retrieving localized text for headings, paragraphs, and other UI elements.\u003C\u002Fp>\u003Cp>For cases where translations contain HTML elements, such as links inside sentences, you can use \u003Ccode>&lt;Trans&gt;\u003C\u002Fcode>. This allows JSX elements like \u003Ccode>&lt;a&gt;\u003C\u002Fcode> to be preserved inside translations without requiring developers to split and concatenate strings manually. \u003Cstrong>This is particularly useful when working with non-developers or external translation teams, as it keeps the translation files clean and structured\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>Since i18next loads translations asynchronously, it's essential to wrap the app in \u003Ccode>&lt;Suspense&gt;\u003C\u002Fcode> to make sure it does not break while translations are being retrieved. If translations take a moment to load, the placeholder \u003Ccode>\"...loading translations\"\u003C\u002Fcode> will be displayed instead of showing an empty screen or broken text.\u003C\u002Fp>\u003Ch3 id=\"handling-dynamic-text\">Handling dynamic text\u003C\u002Fh3>\u003Cp>Before getting into how Localazy handles translations, let's see how to manage dynamic text properly in i18n.\u003C\u002Fp>\u003Cp>A common mistake developers make is \u003Cstrong>manually concatenating strings when inserting \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fvariables\u002F\">variables\u003C\u002Fa>\u003C\u002Fstrong> like usernames or numbers:\u003C\u002Fp>\u003Cpre>\u003Ccode>const { t } = useTranslation();\nconst username = \"David\";\n\nreturn &lt;p&gt;{t(\"hello\")} {username}!&lt;\u002Fp&gt;;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>If the translation file contains:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"hello\": \"Hello\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>It works fine in English but breaks in languages with different sentence structures. For example, in Spanish, a greeting might be:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"hello\": \"¡Hola, {{name}}!\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>So, instead of concatenating, use placeholders inside the translation file:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"news\": {\n    \"title\": \"Latest News\",\n    \"articles\": {\n      \"react19\": {\n        \"title\": \"React 19 Is Coming!\",\n        \"content\": \"The next major version of React is set to release with improved performance, new hooks, and better server-side rendering.\"\n      }\n    }\n  },\n  \"greetings\": {\n    \"hello_user\": \"Hello, {{name}}! Welcome back to the latest news.\"\n  },\n  \"instructions\": \"To learn more, visit &lt;1&gt;React docs&lt;\u002F1&gt;.\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Then, in your component:\u003C\u002Fp>\u003Cpre>\u003Ccode>const { t } = useTranslation();\nconst username = \"David\";\n\nreturn &lt;p&gt;{t(\"greetings.hello_user\", { name: username })}&lt;\u002Fp&gt;;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This keeps translations flexible and grammatically correct across all languages.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%A5%A3-integrating-localazy-for-translation-management\">🥣 Integrating Localazy for translation management\u003C\u002Fh2>\u003Cp>Instead of manually creating and updating translation files, you can use Localazy to handle translations more efficiently. You'll just need to upload your source language files, translate them through the platform, and then pull the translated content into your project. This way, \u003Cstrong>you can add new languages without editing translation files directly.\u003C\u002Fstrong>\u003C\u002Fp>\u003Ch3 id=\"the-process\">The process\u003C\u002Fh3>\u003Col>\u003Cli>First, install the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\" rel=\"noopener noreferrer nofollow\">Localazy CLI\u003C\u002Fa>, which helps you sync translations between your project and the platform.\u003C\u002Fli>\u003C\u002Fol>\u003Cp>\u003Ccode>npm install -g @localazy\u002Fcli\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>The command above installs Localazy globally so you can use it anywhere in your terminal.\u003C\u002Fp>\u003Cp>2. Next, you need to create a \u003Ccode>localazy.json\u003C\u002Fcode> file in the root of your project. This file defines which translation files to upload, the source language, and where to store downloaded translations. Instead of specifying just one file, \u003Cstrong>you can configure it to handle multiple files using an array\u003C\u002Fstrong>, which is useful for projects with structured translation files.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">{\n  \"writeKey\": \"YOUR_WRITE_KEY_HERE\",\n  \"readKey\": \"YOUR_READ_KEY_HERE\",\n  \"upload\": {\n    \"files\": [\n      \"public\u002Flocales\u002Fen.json\",\n      {\n        \"pattern\": \"public\u002Flocales\u002F*.json\"\n      }\n    ],\n    \"language\": \"en\"\n  },\n  \"download\": {\n    \"files\": \"public\u002Flocales\u002F${lang}.json\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This setup ensures that all JSON translation files inside public\u002Flocales\u002F \u003Cstrong>are automatically uploaded rather than needing to specify each file manually\u003C\u002Fstrong>. If the project grows and you introduce namespaced translation files at some point (e.g., separate files for authentication, dashboard, or settings), Localazy will handle them without extra configuration.\u003C\u002Fp>\u003Cp>3. Now that Localazy is configured, \u003Cstrong>upload your source keys\u003C\u002Fstrong> to make them available for translation via \u003Ccode>localazy upload\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>This command sends \u003Ccode>public\u002Flocales\u002Fen.json\u003C\u002Fcode> to Localazy, where translators, team members, or machine translation tools can begin adding translations.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754792582_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Uploading source translations to Localazy.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>4. Once the upload is complete, \u003Cstrong>you can proceed to add new languages\u003C\u002Fstrong>. Localazy provides several ways to translate content:\u003C\u002Fp>\u003Cul>\u003Cli>📝 \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Ftranslating-strings\">Manually enter translations\u003C\u002Fa> for each language.\u003C\u002Fli>\u003Cli>🦾 Use \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fmachine-translation\u002F\">automatic machine translation\u003C\u002Fa> to generate translations instantly.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>To apply MT, select the language you want to translate into and click the machine translation option.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754406765_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Selecting a language for machine translation.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>Then, choose your preferred translation service and click \u003Cstrong>Confirm\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754463226_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Choosing a machine translation service.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>5. When the texts are translated, \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Freviewing-translations\">you can review them\u003C\u002Fa> to verify their accuracy \u003C\u002Fstrong>before confirming them and downloading them into your project with \u003Ccode>localazy download\u003C\u002Fcode>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739754846108_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003Cfigcaption>Reviewing machine-translated content.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>This pulls all available translations from Localazy and places them in the \u003Ccode>\u002Fpublic\u002Flocales\u002F\u003C\u002Fcode> directory. If French (\u003Ccode>fr\u003C\u002Fcode>) and German (\u003Ccode>de\u003C\u002Fcode>) translations exist, the directory structure will now look like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002Fpublic\u002Flocales\n  ├── en.json\n  ├── fr.json\n  ├── de.json\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>At this point, \u003Ccode>i18next\u003C\u002Fcode> will automatically detect the user's preferred language \u003Cstrong>and load the correct translations without additional configuration\u003C\u002Fstrong>.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%92%AC-how-to-switch-between-languages\">💬 How to switch between languages\u003C\u002Fh2>\u003Cp>Now that your app supports multiple languages, you need a way for users to switch between them. Since i18next handles language changes dynamically, you can simply update the language setting when a user selects a different language.\u003C\u002Fp>\u003Cp>Modify \u003Ccode>App.jsx\u003C\u002Fcode> to include language-switching buttons:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">\nimport { Suspense } from \"react\";\nimport \".\u002FApp.css\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nconst lngs = {\n  en: { nativeName: \"English\" },\n  fr: { nativeName: \"French\" },\n  de: { nativeName: \"German\" },\n};\n\nfunction App() {\n  const { t, i18n } = useTranslation();\n\n  return (\n    &lt;div className=\"App\"&gt;\n      &lt;h1&gt;{t(\"news.title\")}&lt;\u002Fh1&gt;\n      &lt;div&gt;\n        {Object.keys(lngs).map((lng) =&gt; (\n          &lt;button\n            key={lng}\n            style={{ fontWeight: i18n.resolvedLanguage === lng ? \"bold\" : \"normal\" }}\n            type=\"button\"\n            onClick={() =&gt; i18n.changeLanguage(lng)}\n          &gt;\n            {lngs[lng].nativeName}\n          &lt;\u002Fbutton&gt;\n        ))}\n      &lt;\u002Fdiv&gt;\n      &lt;article&gt;\n        &lt;h2&gt;{t(\"news.article.title\")}&lt;\u002Fh2&gt;\n        &lt;p&gt;{t(\"news.article.content\")}&lt;\u002Fp&gt;\n      &lt;\u002Farticle&gt;\n      &lt;p&gt;\n        &lt;Trans i18nKey=\"instructions\"&gt;\n          To learn more, visit &lt;a href=\"https:\u002F\u002Freactjs.org\"&gt;React docs&lt;\u002Fa&gt;.\n        &lt;\u002FTrans&gt;\n      &lt;\u002Fp&gt;\n    &lt;\u002Fdiv&gt;\n  );\n}\n\nexport default function WrappedApp() {\n  return (\n    &lt;Suspense fallback=\"...loading translations\"&gt;\n      &lt;App \u002F&gt;\n    &lt;\u002FSuspense&gt;\n  );\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the code above, an object stores the available language options and is looped through to generate buttons dynamically. \u003Cstrong>When a user clicks a button, \u003Ccode>i18n.changeLanguage(lng)\u003C\u002Fcode> updates the language instantly\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fpaper-attachments.dropboxusercontent.com\u002Fs_75C12705ED53D91204F6FBA65FA5D82C30AAE9B9D52E96CE61E0FCEB1E2B6D6D_1739777253108_image.png\" class=\"kg-image\" alt loading=\"lazy\">\u003C\u002Ffigure>\u003Ch2 id=\"%F0%9F%8E%B2-handling-pluralization-and-date-formatting\">🎲 Handling pluralization and date formatting\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fpluralization\">Pluralization\u003C\u002Fa> and date formatting can vary significantly across languages. While i18next can automatically handle pluralization in many cases, you often need to integrate additional tools or plugins like ICU or Luxon for more complex scenarios or date formatting.\u003C\u002Fp>\u003Cp>Next, you'll learn how to handle both properly in a React project.\u003C\u002Fp>\u003Ch3 id=\"pluralization-with-i18next\">Pluralization with i18next\u003C\u002Fh3>\u003Cp>\u003Cstrong>i18next can determine the correct plural form\u003C\u002Fstrong> based on the language's grammar rules \u003Cstrong>if your keys are structured correctly\u003C\u002Fstrong>. For example, here's a simple pluralization case in the \u003Ccode>en.json\u003C\u002Fcode> translation file:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"news\": {\n    \"articlesRead_one\": \"You have read one article.\",\n    \"articlesRead_other\": \"You have read {{count}} articles.\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the React component, \u003Ccode>t()\u003C\u002Fcode> is then used to retrieve the appropriate translation based on the count:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;p&gt;{t(\"news.articlesRead\", { count: 1 })}&lt;\u002Fp&gt;  \u002F\u002F \"You have read one article.\"\n&lt;p&gt;{t(\"news.articlesRead\", { count: 5 })}&lt;\u002Fp&gt; \u002F\u002F \"You have read 5 articles.\"\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Here, i18next automatically picks the correct plural form ( \u003Ccode>_one\u003C\u002Fcode> or \u003Ccode>_other\u003C\u002Fcode> ) based on the count passed. This works fine for languages that only have two plural forms (singular and plural), like English.\u003C\u002Fp>\u003Cp>However, some languages have more than two plural forms, making it difficult to rely on the default _one and _other keys. For example, languages like Russian and Arabic have additional plural forms for different quantities, such as \u003Cstrong>few, many, or other\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>You can use \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ficu\">ICU\u003C\u002Fa> message syntax to handle languages with more than two plural forms. \u003Cstrong>This allows you to define all plural forms in a single key and let i18next choose the correct form dynamically\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp>First, install the \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fi18next-icu\" rel=\"noopener noreferrer nofollow\">i18next-icu\u003C\u002Fa> plugin, which enables ICU syntax support in i18next:\u003C\u002Fp>\u003Cp>\u003Ccode>npm install i18next-icu\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>In the \u003Ccode>i18n.js\u003C\u002Fcode> file, use the ICU plugin by adding it to the i18next initialization:\u003C\u002Fp>\u003Cpre>\u003Ccode>import ICU from \"i18next-icu\";\n\ni18n.use(ICU).init({\n  fallbackLng: \"en\",\n  debug: true\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Instead of defining separate keys for \u003Ccode>_one\u003C\u002Fcode> and \u003Ccode>_other\u003C\u002Fcode>, you now use ICU message syntax to handle pluralization. This makes it easier to manage languages with more plural forms:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"news\": {\n    \"articlesRead\": \"You have read {count, plural, one {one article} other {# articles}}.\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The React component remains the same, but\u003Cstrong> i18next will now automatically handle plural forms based on the user's language\u003C\u002Fstrong>.\u003C\u002Fp>\u003Ch3 id=\"date-formatting-with-luxon\">Date formatting with Luxon\u003C\u002Fh3>\u003Cp>Just like pluralization, date formats differ across regions. While JavaScript's \u003Ccode>Intl.DateTimeFormat\u003C\u002Fcode> can handle basic date formatting, \u003Ca href=\"https:\u002F\u002Fmoment.github.io\u002Fluxon\u002F#\u002F\" rel=\"noopener noreferrer nofollow\">Luxon\u003C\u002Fa> is used in this article because it provides better control over formatting, time zones, and locale-based adjustments.\u003C\u002Fp>\u003Cp>To use Luxon, install it in your project:\u003Ccode>npm install luxon\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>Next, add a custom \"formatter\" in i18n.js to use Luxon for date formatting. Here's how to do it:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import { DateTime } from 'luxon'; \n\n\u002F\u002F other config\n\ni18n.services.formatter.add('DATE_HUGE', (value, lng, options) =&gt; {\n  return DateTime.fromJSDate(value)\n    .setLocale(lng)\n    .toLocaleString(DateTime.DATE_MED);\n});\n\nexport default i18n;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You can now use the custom date format in your translation file:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n  \"footer\": {\n    \"date\": \"Today is {{date, DATE_HUGE}}\"\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the component, use \u003Ccode>t()\u003C\u002Fcode> to inject the current date into the translation:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;footer&gt;\n  &lt;p&gt;{t(\"footer.date\", { date: new Date() })}&lt;\u002Fp&gt;\n&lt;\u002Ffooter&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Luxon will automatically handle the localization of the date format, making sure it displays correctly in the user's preferred language.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%94%8D-testing-for-multilingual-readiness\">🔍 Testing for multilingual readiness\u003C\u002Fh2>\u003Cp>Proper internationalization of your application involves more than adding translations. It also involves testing to prevent broken translations, missing keys, layout issues, and incorrect pluralization or date formatting.\u003C\u002Fp>\u003Cp>\u003Cstrong>One of the most common issues in i18n is missing translations\u003C\u002Fstrong>. i18next provides a built-in way to log missing translations, but you can take it a step further by\u003Cstrong> automating the detection process\u003C\u002Fstrong>. To log missing translations in the console, update \u003Ccode>i18n.js\u003C\u002Fcode>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">i18n.init({\n  fallbackLng: \"en\",\n  debug: true,  \u002F\u002F Enable debug mode\n  saveMissing: true, \u002F\u002F Logs missing keys in development\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Now, if a translation is missing, i18next will log a warning like this:\u003C\u002Fp>\u003Cp>\u003Ccode>i18next::translator: missingKey en translation news.articleTitle\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>This helps you catch missing keys during development before they become a problem in production. However, instead of manually checking logs, you can write a Jest test to confirm that all English translations exist in en.json:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import i18n from \"..\u002Fsrc\u002Fi18n\";\nimport en from \"..\u002Fpublic\u002Flocales\u002Fen.json\";\n\ntest(\"All English translations exist\", () =&gt; {\n  Object.keys(en).forEach((key) =&gt; {\n    expect(i18n.t(key)).not.toBe(key); \u002F\u002F If t(key) returns the key itself, it's missing\n  });\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>For this test to work, install \u003Ca href=\"https:\u002F\u002Fjestjs.io\u002F\" rel=\"noopener noreferrer nofollow\">Jest\u003C\u002Fa> and related testing libraries if you haven't already:\u003C\u002Fp>\u003Cp>\u003Ccode>npm install --save-dev jest @testing-library\u002Freact @testing-library\u002Fjest-dom\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>\u003Cstrong>With Jest set up, you can also test pluralization rules\u003C\u002Fstrong> to ensure they always return the correct form. If a translation is missing or incorrectly structured, the test will fail.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">test(\"Pluralization works correctly\", () =&gt; {\n  expect(i18n.t(\"news.articlesRead\", { count: 1 })).toBe(\"You have read one article.\");\n  expect(i18n.t(\"news.articlesRead\", { count: 5 })).toBe(\"You have read 5 articles.\");\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Another important check is \u003Cstrong>making sure that language switching updates the UI correctly\u003C\u002Fstrong>. Using \u003Ca href=\"https:\u002F\u002Ftesting-library.com\u002Fdocs\u002Freact-testing-library\u002Fintro\" rel=\"noopener noreferrer nofollow\">React Testing Library\u003C\u002Fa>, you can simulate a user changing languages and verify that the correct translations appear.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-javascript\">import { render, screen, act } from \"@testing-library\u002Freact\";\nimport App from \"..\u002Fsrc\u002FApp\";\nimport i18n from \"..\u002Fsrc\u002Fi18n\";\n\ntest(\"Switching language updates translations\", async () =&gt; {\n  render(&lt;App \u002F&gt;);\n  \n  expect(screen.getByText(\"Latest News\")).toBeInTheDocument(); \u002F\u002F English by default\n\n  await act(() =&gt; i18n.changeLanguage(\"fr\"));\n\n  expect(screen.getByText(\"Dernières Nouvelles\")).toBeInTheDocument(); \u002F\u002F French translation appears\n});\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This confirms that translations update correctly when the user changes the language.\u003C\u002Fp>\u003Cp>To prevent i18n issues from reaching production, \u003Cstrong>these tests should be integrated into \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions\" rel=\"noopener noreferrer nofollow\">GitHub Actions\u003C\u002Fa> or another CI\u002FCD pipeline\u003C\u002Fstrong>. In GitHub Actions, update .github\u002Fworkflows\u002Ftests.yml to include i18n tests:\u003C\u002Fp>\u003Cpre>\u003Ccode>jobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v3\n      - run: npm install\n      - run: npm test\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>If any i18n test fails, the build stops, preventing broken translations from reaching users.\u003C\u002Fp>\u003Ch2 id=\"%E2%9C%94%EF%B8%8F-final-thoughts\">✔️ Final thoughts\u003C\u002Fh2>\u003Cp>\u003Cstrong>Internationalization should be part of your development process from the start and not something that's added later\u003C\u002Fstrong>. ☝️ Setting it up early saves time and avoids messy rewrites when you scale and need to support more languages.\u003C\u002Fp>\u003Cp>To keep translations up to date, use CI\u002FCD to sync with a translation management system like Localazy. This way, new keys are pushed automatically, and updated translations are pulled without manual effort.\u003C\u002Fp>\u003Cp>Since i18next loads translations dynamically, adding a new language is as simple as enabling it in Localazy. Once synced, the translations will be available in your app without changing any code. \u003Cstrong>With this setup, scaling to new markets is just a matter of adding translations, not rebuilding your project\u003C\u002Fstrong>.\u003C\u002Fp>","public","none","2025-03-12T14:11:54.000+01:00",[1970],{"id":1856,"name":1857,"slug":1858,"profile_image":1859,"cover_image":7,"bio":1971,"website":1972,"location":7,"facebook":7,"twitter":1973,"meta_title":7,"meta_description":7,"url":1974},"There are over 4B people online behind language barriers. \nTranslate software, website or any other kind of digital product.","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Flocalazy\u002F","@localazy","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Flocalazy-team\u002F",[1976,1979,1982,1985,1990,1996,2001,2006,2012,2017,2022,2027,2032],{"id":1977,"name":480,"slug":479,"description":480,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1978},"60a37fc7cf7b6a0001d1f0fc","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Freact\u002F",{"id":1980,"name":1868,"slug":1868,"description":7,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1981},"60f567ab6f8ebe0001bd80ec","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fi18n\u002F",{"id":1983,"name":1870,"slug":1871,"description":1870,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1984},"60a37fc7cf7b6a0001d1f0e9","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fguide\u002F",{"id":1986,"name":1987,"slug":1988,"description":7,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1989},"60fffb486f8ebe0001bd8ddd","[COMSHARE]","comshare","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcomshare\u002F",{"id":1991,"name":1992,"slug":1993,"description":1994,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1995},"60a37fc7cf7b6a0001d1f113","[CTA] React i18n done right with Localazy","cta-5","Go ahead and make your React app international in a few steps. Rich shared translations memory is waiting to be used in minutes from now.","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-5\u002F",{"id":1997,"name":1998,"slug":1999,"description":1878,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2000},"60a37fc7cf7b6a0001d1f16c","[DICT] Internationalization (i18n)","term-79","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-79\u002F",{"id":2002,"name":2003,"slug":2004,"description":1891,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2005},"60a37fc7cf7b6a0001d1f161","[DICT] React","term-68","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-68\u002F",{"id":2007,"name":2008,"slug":2009,"description":2010,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2011},"60a37fc7cf7b6a0001d1f130","[DICT] Flutter","term-19","Flutter is SDK made by Google for building natively compiled applications for mobile, web and desktop from a single codebase.","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-19\u002F",{"id":2013,"name":2014,"slug":2015,"description":1898,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2016},"60a37fc7cf7b6a0001d1f163","[DICT] Vue.js","term-70","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-70\u002F",{"id":2018,"name":2019,"slug":2020,"description":1907,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2021},"60a37fc7cf7b6a0001d1f162","[DICT] Angular","term-69","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-69\u002F",{"id":2023,"name":2024,"slug":2025,"description":1915,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2026},"60a37fc7cf7b6a0001d1f16d","[DICT] NodeJS","term-80","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-80\u002F",{"id":2028,"name":2029,"slug":2030,"description":1922,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2031},"60a37fc7cf7b6a0001d1f175","[DICT] i18next","term-88","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-88\u002F",{"id":2033,"name":2034,"slug":2035,"description":1941,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2036},"60a37fc7cf7b6a0001d1f12a","[DICT] Machine translation (MT)","term-13","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-13\u002F",{"id":1856,"name":1857,"slug":1858,"profile_image":1859,"cover_image":7,"bio":1971,"website":1972,"location":7,"facebook":7,"twitter":1973,"meta_title":7,"meta_description":7,"url":1974},{"id":1977,"name":480,"slug":479,"description":480,"feature_image":7,"visibility":1966,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1978},"https:\u002F\u002Fghost.localazy.com\u002Fsetting-up-i18n-in-your-react-app-from-day-one\u002F",[2041,2056,2074],{"id":2042,"owner":2043,"created_by":7,"sort":7,"title":2048,"slug":2049,"modified_on":764,"created_on":2050,"pinned":15,"badge":7,"priority":1824,"main_image":2051,"status":8,"tags":2052,"dictionary":2055,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"665d9cb634f1ce00011a0d19",{"id":2044,"first_name":2045,"last_name":764,"slug":2046,"avatar":2047},"65647a510470910001942873","Simona Rahmanova","simona-rahmanova","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F03\u002Fsimona.png","Localization 101 | Basic concepts for newcomers","localization-101-basic-concepts-a-beginner-needs-to-know","2024-07-29T15:24:00.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F06\u002Flocalization-101.png",[2053,2054],{"id":319,"created_on":1845,"status":8,"label":217,"slug":1833,"on_index_page":17},{"id":319,"created_on":1845,"status":8,"label":1870,"slug":1871,"on_index_page":15},[],{"id":2057,"owner":2058,"created_by":7,"sort":7,"title":2059,"slug":2060,"modified_on":764,"created_on":2061,"pinned":15,"badge":7,"priority":1824,"main_image":2062,"status":8,"tags":2063,"dictionary":2073,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"633ad643fe956a000108a63d",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"The ultimate guide to Localazy translation services","guide-localazy-translation-services","2022-10-14T10:21:57.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2022\u002F10\u002FCLT-services.png",[2064,2067,2070,2072],{"id":319,"created_on":1845,"status":8,"label":2065,"slug":2066,"on_index_page":15},"Translations","translations",{"id":319,"created_on":1845,"status":8,"label":2068,"slug":2069,"on_index_page":15},"Continuous Localization","continuous-localization",{"id":319,"created_on":1845,"status":8,"label":795,"slug":2071,"on_index_page":15},"localazy",{"id":319,"created_on":1845,"status":8,"label":1870,"slug":1871,"on_index_page":15},[],{"id":2075,"owner":2076,"created_by":7,"sort":7,"title":2077,"slug":2078,"modified_on":764,"created_on":2079,"pinned":15,"badge":7,"priority":1824,"main_image":2080,"status":8,"tags":2081,"dictionary":2087,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"6953a75663350c0001d6289c",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"A practical guide to translating with Localazy AI","a-practical-guide-to-translating-with-localazy-ai","2025-12-30T17:08:51.000+01:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F12\u002FLocalazy-AI-in-practice.png",[2082,2083,2086],{"id":269,"created_on":1845,"status":8,"label":1830,"slug":1831,"on_index_page":17},{"id":319,"created_on":1845,"status":8,"label":2084,"slug":2085,"on_index_page":15},"Automated Localization","automated-localization",{"id":319,"created_on":1845,"status":8,"label":1870,"slug":1871,"on_index_page":15},[],{"id":26,"sort":7,"created_on":2089,"name":2090,"cta_link":2091,"banner_image":2092},"2022-03-17T12:23:14.000Z","default","https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Flocalazy-ai",{"id":2093},"72defd59-a21d-44b9-822c-4e183ca62b99"]