[{"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-guide-to-translate-angular-apps-with-ngx-translate-foundations":1851},[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 16:37:18",{"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":1850,"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,1845,1849],{"id":269,"created_on":1828,"status":8,"label":1830,"slug":1831,"on_index_page":17},{"id":1846,"created_on":1828,"status":8,"label":1847,"slug":1848,"on_index_page":15},646,"Business Development","business-development",{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},[],{"post":1852,"relatedPosts":2058,"banner":2117},{"id":1853,"owner":1854,"created_by":7,"sort":7,"title":1859,"slug":1860,"modified_on":1861,"created_on":1862,"pinned":15,"badge":7,"priority":1824,"main_image":1863,"status":8,"tags":1864,"dictionary":1872,"reading_time":147,"excerpt":1975,"og_title":764,"og_description":764,"og_image":764,"content":1976,"meta_title":1977,"meta_description":1978,"canonical":764,"cta":1979,"fullGhostPost":1987},"690e5d7b63350c0001d617c5",{"id":1855,"first_name":1856,"last_name":764,"slug":1857,"avatar":1858},"6824a22d63350c0001d5a5cb","Kevine Nzapdi","kevine-nzapdi","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002FKevine.png","Guide to translating Angular apps with ngx-translate | Part 1: Foundations 🏗️","guide-to-translate-angular-apps-with-ngx-translate-foundations","2026-04-16T16:28:48.000+02:00","2025-11-13T13:20:39.000+01:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Ftechnical-article-1.png",[1865,1867,1868],{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1866,"on_index_page":17},"i18n",{"id":319,"created_on":1828,"status":8,"label":495,"slug":494,"on_index_page":15},{"id":1869,"created_on":1828,"status":8,"label":1870,"slug":1871,"on_index_page":15},6556628,"Tutorial","tutorial",[1873,1882,1901,1921,1937,1953],{"id":1874,"status":8,"owner":1875,"created_on":1876,"title":495,"excerpt":1877,"content":1878,"slug":494,"meta_title":764,"meta_description":7,"canonical":7,"related_terms":1879},69,"2bac48a8-b362-482f-b574-3bc71dca4c5b","2022-03-17T12:22:55.000Z","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)",[1880],{"id":1881,"slug":507},74,{"id":1883,"status":370,"owner":1884,"created_on":1885,"title":1886,"excerpt":1887,"content":1888,"slug":1866,"meta_title":7,"meta_description":7,"canonical":7,"related_terms":1889},192,"ceebb166-1990-467a-a514-56e71dfcf7a4","2026-05-12T07:09:24.000Z","i18n ","i18n is an abbreviation for internationalization, the practice of preparing software to be localized. ","i18n, or internationalization, is the process of designing software so it can be easily adapted for different languages, regions, and cultures without changing the core code. The name comes from the abbreviation \"i18n,\" where \"18\" represents the number of letters between \"i\" and \"n\" in the word \"internationalization.\"\n\n### Key points about i18n: 🌍\n- **Content Separate from Code.** i18n keeps language-specific content like text and dates separate from the code, making it easier to translate and adapt.\n- **Handles Plurals and Context.** It supports multiple plural forms, gender-specific words, and cultural context changes.\n- **Cross-Platform.** i18n can be applied to software, websites, and mobile apps, ensuring smooth localization across all platforms.\n- **Prepares for Globalization.** It sets up your product to handle different languages, date formats, currencies, and writing directions like left-to-right or right-to-left.\n\ni18n simplifies the localization process, making it easier to adapt software for global audiences.",[1890,1891,1893,1895,1897,1899],{"id":5,"slug":1833},{"id":22,"slug":1892},"translation",{"id":13,"slug":1894},"globalization",{"id":94,"slug":1896},"t9n",{"id":456,"slug":1898},"g11n",{"id":12,"slug":1900},"l10n",{"id":1902,"status":8,"owner":1903,"created_on":1885,"title":1904,"excerpt":1905,"content":1906,"slug":1907,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1908},255,"a5e46ee7-1f50-4f81-ae2d-68a664c76aa2","ICU Message Format","A localization-friendly syntax that lets developers write dynamic, multilingual messages using placeholders and logic rules.","ICU Message Format is part of the [International Components for Unicode (ICU)](https:\u002F\u002Ficu.unicode.org \"https:\u002F\u002Ficu.unicode.org\") suite. It is widely used in localization to create dynamic, context-aware messages that adapt to grammatical and structural rules across languages. Instead of hardcoding separate strings for each scenario, developers use ICU Message Format to define templates that automatically adjust based on variables such as quantity, gender, or other contextual inputs.\n\nThis system is essential in software localization, where content like notifications, user messages, and UI text often depends on dynamic data. It allows translators to focus on conveying the intended meaning without restructuring sentences manually for every case or language.\n\nFor example, in English, the sentence “You have 1 new message” changes to “You have 5 new messages” depending on the number. In other languages, the change might involve gender-specific words, different sentence structures, or alternate verb conjugations. \n\nICU Message Format enables this by using placeholders and conditional logic, ensuring that messages are grammatically correct and natural-sounding in all supported languages.\n\n### 🧩 Highlights of ICU Message Format:\n\n* Handles pluralization, gender variations, and context-based message structures\n* Uses placeholders to insert dynamic values such as numbers, names, and dates\n* Supports nested messages and conditional formatting for advanced use cases\n* Integrates with localization platforms like Localazy, Phrase, and Transifex\n* Keeps translations consistent and reusable across multiple contexts\n* Reduces the need for multiple translation strings per language\n* Improves translation speed by minimizing structural rework \n\n### 🛠️ **Example:**\n\n```\n\"You have {NUM_MESSAGES, plural, one {# new message} other {# new messages}}.\"\n```","icu-message-format",[1909,1910,1913,1916,1918],{"id":1613,"slug":521},{"id":1911,"slug":1912},90,"icu",{"id":1914,"slug":1915},116,"yaml",{"id":1181,"slug":1917},"placeholder",{"id":1919,"slug":1920},274,"software-localization",{"id":1922,"status":8,"owner":1903,"created_on":1923,"title":643,"excerpt":1924,"content":1925,"slug":411,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1926},284,"2026-05-12T07:09:25.000Z","A text-based interface used to interact with software and operating systems through commands.","A command-line interface (CLI) allows users to execute commands by typing them into a terminal or command prompt. Unlike graphical user interfaces (GUIs), CLIs rely on text input, which can help in making operations faster and more efficient for experienced users. Users can navigate file systems, run scripts, and manage software without needing to use a mouse or graphical elements.\n\nMany developers prefer CLIs for tasks such as automation and scripting, as they can easily chain commands together to perform complex operations quickly. Moreover, CLIs often consume fewer system resources compared to GUIs, making them suitable for low-power devices or remote access situations.\n\nCLI environments can vary significantly between different operating systems, such as Unix, Linux, and Windows, each offering unique commands and functionalities. Familiarity with the command line boosts the user's overall productivity and understanding of the underlying system.\n\n### 🖥️ Key points about CLIs:\n\n* Enable automation and scripting for repetitive tasks.\n* Consume fewer resources compared to graphical interfaces.\n* Offer a powerful tool for developers and system administrators.\n* Provide a way to interact with systems through text commands.\n* Vary across operating systems, requiring users to learn specific commands.\n\n### 💙 Localazy CLI\n\nAt Localazy, we have [our own CLI](https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fcli\u002F \"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fcli\u002F\") that helps developers translate apps and manage localization workflows much faster using simple, plain commands. \n\nWith the Localazy CLI, you can:\n\n* Upload source strings to our platform.\n* Download your localized files back to your app.\n* Automate the data exchange within your CI\u002FCD pipeline.\n* Create, merge, and delete branches.\n* Convert between file formats for easier multiplatform localization.\n* And more!\n\n> *Interested in diving deeper? [Get started here with the basics.](https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics)* ",[1927,1929,1931,1934],{"id":1928,"slug":659},109,{"id":1694,"slug":1930},"gtk",{"id":1932,"slug":1933},237,"ui",{"id":1935,"slug":1936},285,"usability",{"id":1938,"status":8,"owner":1903,"created_on":1939,"title":1940,"excerpt":1941,"content":1942,"slug":1940,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1943},426,"2026-05-12T07:09:27.000Z","ngx-translate","A community-built translation library for Angular that loads and displays localized strings at runtime.","[ngx-translate](https:\u002F\u002Fngx-translate.org \"https:\u002F\u002Fngx-translate.org\") is a runtime translation library for Angular that loads localized strings from JSON files and updates the UI as soon as the user switches languages. It is used to build multilingual interfaces without rebuilding the application for every locale. It loads translation files at runtime, applies keys directly in templates, and updates visible text when the active language changes. This makes it practical for projects that handle dynamic content, frequent releases, or environments where language files need to come from an API.\n\nThe library offers a flexible structure: teams can organize translations in separate folders, load them on demand, or map them to custom file names. Interpolation, nested keys, and fallbacks are supported out of the box. However, for features such as ICU Message handling or advanced parsing, you might need to use compatible plugins. \n\nThis modular approach makes ngx-translate suitable for Angular, Ionic, hybrid apps, and setups that need more control than Angular’s built-in i18n system.\n\n### 📌 Key points to know about ngx-translate\n\n* It supports nested keys, parameters, plural forms, and fallbacks.\n* JSON-based translation files let teams add, edit, and restructure content quickly.\n* Language switching happens at runtime, so the UI updates instantly without a rebuild.\n* The architecture is modular, so teams can add plugins or write their own compiler or parser.\n* Works well with apps that need fast iteration, dynamic content, or remote translation sources.\n* The library works with custom loaders, so translations can come from the server, a CMS, or a CDN.\n\n### 🧩 How ngx-translate fits into localization workflows\n\n* Works with translation platforms that export structured JSON.\n* Makes it easy to load locale data at different stages of the app lifecycle.\n* Ideal for projects that want live updates across all supported languages.\n* Supports continuous delivery because content changes do not require a deployment.\n* Helps teams test translations, layout shifts, and parameter handling without rebuilding the app.\n\n### Notes\n\nClient-side loading gives ngx-translate a lot of flexibility, yet it also puts file size and network conditions under direct pressure. Many teams split translations by module, preload key sections, or serve files through [a CDN](https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Flanguage-cdn) to keep the interface responsive.\n\n### Related sources:\n\n* GitHub: \u003Chttps:\u002F\u002Fgithub.com\u002Fngx-translate\u002Fcore>\n* npm: \u003Chttps:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@ngx-translate\u002Fcore>\n* Documentation: \u003Chttps:\u002F\u002Fgithub.com\u002Fngx-translate\u002Fcore#readme>",[1944,1945,1946,1949,1950],{"id":1613,"slug":521},{"id":1874,"slug":494},{"id":1947,"slug":1948},79,"internationalization",{"id":1902,"slug":1907},{"id":1951,"slug":1952},405,"string-interpolation",{"id":1954,"status":8,"owner":1903,"created_on":1939,"title":1955,"excerpt":1956,"content":1957,"slug":1958,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1959},428,"Pseudo-locale","A test locale that applies controlled text changes to mimic a real locale's behaviour and reveal early i18n faults.","A pseudo-locale modifies visible strings automatically during development or testing. It helps developers and QA see where the UI breaks, where placeholders fail, and where text assumptions hide i18n issues. Typical transformations include accenting characters, expanding length, adding visible delimiters, and flipping direction. Pseudo-locales reveal functional and design problems early, reducing rework and translation costs.\n\nTeams use pseudo-locales to find issues that often appear only after localization: clipped text, missing externalization, broken placeholders, font limits, or incorrect handling of right-to-left content. This makes pseudo-locales a direct way to test international readiness before translators start working. However, pseudo-locales do not check tone or cultural fit. Their purpose is to expose technical problems.\n\n### 🧪 What pseudo-locales change\n\n* Accent or extended characters.\n* Longer text through padded segments.\n* Bracket or symbol markers around each string.\n* Unicode direction marks for RTL testing.\n* Visible markers around variables and placeholders.\n\n### 🤔 How to create useful pseudo-locales:\n\n1. Accent or substitute characters (e → è\u002Fë) so ASCII-only code reveals encoding or font issues.\n2. Expand strings (add padding or repeat words) to test layout and wrapping.\n3. Insert visible placeholders or tags around variables to catch missing or reordered placeholders.\n4. Apply Unicode RTL markers or mirror characters for right-to-left testing.\n5. Automate generation from the source string bundle and include pseudo-locales in smoke tests.\n\n### Notes\n\nA pseudo-locale must reflect realistic stress on the interface. Avoid extreme growth patterns that no natural language produces, and check every part of the product, including error states and secondary screens. This ensures the test mirrors real usage instead of producing noise. ","pseudo-locale ",[1960,1963,1966,1969,1972],{"id":1961,"slug":1962},161,"rtl",{"id":1964,"slug":1965},270,"unicode",{"id":1967,"slug":1968},306,"localization-quality-assurance",{"id":1970,"slug":1971},409,"localization-testing",{"id":1973,"slug":1974},427,"pseudo-testing","Learn how to integrate runtime localization with ngx-translate and streamline translations using Localazy, complete with ICU plurals, pseudo-locales for testing, and PWA enhancements to deliver a fast, offline-ready, and naturally multilingual application.","\u003Cp>Building invoices is easy; making them feel native in every language is where the real craft lives. In this guide, \u003Cstrong>we’ll turn a simple Angular invoice app into a polished, multilingual experience\u003C\u002Fstrong> using Angular localization library \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fngx-translate\u002Fcore\">ngx-translate\u003C\u002Fa> for runtime i18n and Localazy for a smooth upload-translate-download loop. Along the way, we’ll add ICU plurals, a pseudo-locale for visual QA, and a few PWA touches so your localized app feels fast, offline-friendly, and ready for real users.\u003C\u002Fp>\u003Ch2 id=\"what-youll-build-in-this-tutorial\">🧱 What you'll build in this tutorial \u003Ca class=\"markdownit-header-anchor\" href=\"#what-youll-build-in-this-tutorial\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Here’s a quick look at the Angular localization app you’ll create in this tutorial. The video below shows the final result, including the integration with Localazy for managing translations effortlessly.\u003C\u002Fp>\u003Col>\u003Cli>\u003Cstrong>🏗️ Part 1: Foundations\u003C\u002Fstrong>. Set up your Angular project, configure runtime i18n with ngx-translate, handle missing translations, and style everything with Tailwind.\u003C\u002Fli>\u003Cli>\u003Cstrong>📲 Part 2: App logic\u003C\u002Fstrong>. Build the full invoice dashboard and create, edit, delete, print, and export invoices while preparing every element for translation.\u003C\u002Fli>\u003Cli>\u003Cstrong>🌎 Part 3: i18n\u003C\u002Fstrong>.\u003Cstrong> \u003C\u002Fstrong>Integrate Localazy, manage the translation workflow, add pseudo-locales for testing, and use ICU pluralization for dynamic content.\u003C\u002Fli>\u003C\u002Fol>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Finvoice-angular-localazy.gif\" class=\"kg-image\" alt loading=\"lazy\" width=\"1926\" height=\"1060\">\u003C\u002Ffigure>\u003Ch2 id=\"project-overview\">🧑🏿‍💻 Project overview \u003Ca class=\"markdownit-header-anchor\" href=\"#project-overview\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>In this project, you’ll build a \u003Cstrong>Progressive Web App (PWA)\u003C\u002Fstrong> using \u003Ca href=\"https:\u002F\u002Fangular.dev\u002F\">Angular\u003C\u002Fa> designed to showcase a complete localization workflow. The app manages invoice data, supports multiple languages, and integrates with Localazy for automated translation management.\u003C\u002Fp>\u003Cpre>\u003Ccode>invoice-pwa\u002F\n├── public\u002F\n│   ├── assets\u002F\n│   │   └── i18n\u002F\n│   │       ├── en.json\n│   │       ├── fr.json\n│   │       └── qps.json\n│   ├── icons\u002F\n│   ├── favicon.ico\n│   └── manifest.webmanifest\n│\n├── src\u002F\n│   ├── app\u002F\n│   │   ├── core\u002F\n│   │   │   ├── models\u002F\n│   │   │   │   └── invoice.model.ts\n│   │   │   ├── network\u002F\n│   │   │   │   └── network.service.ts\n│   │   │   ├── persistence\u002F\n│   │   │   │   ├── invoice.repository.ts\n│   │   │   │   └── invoice.serialization.ts\n│   │   │   ├── pwa\u002F\n│   │   │   │   ├── pwa.service.ts\n│   │   │   │   └── update.service.ts\n│   │   │   ├── stores\u002F\n│   │   │   │   └── invoice.store.ts\n│   │   │   ├── utils\u002F\n│   │   │   │   ├── csv.ts\n│   │   │   │   ├── date.ts\n│   │   │   │   ├── files.ts\n│   │   │   │   ├── id.ts\n│   │   │   │   ├── money.ts\n│   │   │   │   ├── time.ts\n│   │   │   │   └── dev-missing.handler.ts\n│   │   │   ├── language.service.ts\n│   │   │   └── locale-format.service.ts\n│   │   │\n│   │   ├── features\u002F\n│   │   │   ├── dashboard\u002F\n│   │   │   │   ├── dashboard.component.html\n│   │   │   │   ├── dashboard.component.scss\n│   │   │   │   └── dashboard.component.ts\n│   │   │   ├── invoice-edit\u002F\n│   │   │   │   ├── invoice-edit.component.html\n│   │   │   │   ├── invoice-edit.component.scss\n│   │   │   │   └── invoice-edit.component.ts\n│   │   │   └── invoice-view\u002F\n│   │   │       ├── invoice-view.component.html\n│   │   │       ├── invoice-view.component.scss\n│   │   │       └── invoice-view.component.ts\n│   │   │\n│   │   ├── shared\u002F\n│   │   │   └── translate-loader.factory.ts\n│   │   ├── app.config.ts\n│   │   ├── app.routes.ts\n│   │   ├── app.html\n│   │   ├── app.scss\n│   │   ├── app.spec.ts\n│   │   ├── app.ts\n│   │   ├── index.html\n│   │   ├── main.ts\n│   │   └── styles.scss\n│\n├── .editorconfig\n├── .gitignore\n├── .postcssrc.json\n├── angular.json\n├── localazy.json\n├── localazy.keys.json\n├── ngsw-config.json\n├── package-lock.json\n├── package.json\n├── [README.md](http:\u002F\u002Freadme.md\u002F)\n├── tailwind.config.js\n├── tsconfig.app.json\n├── tsconfig.json\n└── tsconfig.spec.json\n\nThe folder structure is organized for clarity and\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>For clarity and stability, the folder structure is organized like this:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>\u003Ccode>public\u002Fassets\u002Fi18n\u003C\u002Fcode>\u003C\u002Fstrong> holds all translation files (\u003Ccode>en.json\u003C\u002Fcode>, \u003Ccode>fr.json\u003C\u002Fcode>, and \u003Ccode>qps.json\u003C\u002Fcode>) used by the Angular i18n system.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>src\u002Fapp\u002Fcore\u003C\u002Fcode>\u003C\u002Fstrong> contains essential app logic such as models, data persistence, network handling, and localization services.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>src\u002Fapp\u002Ffeatures\u003C\u002Fcode>\u003C\u002Fstrong> includes feature modules like the dashboard, invoice editor, and invoice viewer that demonstrate component-based structures in Angular.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>src\u002Fapp\u002Fshared\u003C\u002Fcode>\u003C\u002Fstrong> provides shared utilities like the custom translation loader used to connect \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fngx-translate\u002Fcore\">ngx-translate\u003C\u002Fa> with Localazy.\u003C\u002Fli>\u003Cli>\u003Cstrong>Root files\u003C\u002Fstrong> such as \u003Ccode>angular.json\u003C\u002Fcode>, \u003Ccode>localazy.json\u003C\u002Fcode>, and \u003Ccode>tailwind.config.js\u003C\u002Fcode> define build configuration, localization settings, and global styling via \u003Ca href=\"https:\u002F\u002Ftailwindcss.com\u002Fdocs\u002Finstallation\">Tailwind CSS\u003C\u002Fa>.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>This modular setup will make our app maintainable while providing a solid foundation for scaling to more languages, features, and environments.\u003C\u002Fp>\u003Ch2 id=\"1-step-1-create-a-new-angular-application\">1️⃣ Step 1: Create a new Angular application \u003Ca class=\"markdownit-header-anchor\" href=\"#1-step-1-create-a-new-angular-application\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>To begin integrating \u003Cstrong>Angular i18n\u003C\u002Fstrong> with \u003Cstrong>Localazy\u003C\u002Fstrong>, first scaffold a clean Angular workspace.\u003C\u002Fp>\u003Cp>This ensures your localization setup is consistent and ready for translation file extraction later.\u003C\u002Fp>\u003Cp>Run the following command in your terminal:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-jsx\">npx @angular\u002Fcli@latest new invoice-pwa --routing --style=scss\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>When prompted, select the following options:\u003C\u002Fp>\u003Cul>\u003Cli>Server-Side Rendering (SSR) and Static Site Generation: \u003Cstrong>No\u003C\u002Fstrong>\u003C\u002Fli>\u003Cli>'Zoneless' application without zone.js: \u003Cstrong>No\u003C\u002Fstrong>\u003C\u002Fli>\u003Cli>AI tools configuration: \u003Cstrong>None\u003C\u002Fstrong>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>With this, you'll get a clean environment without extra dependencies or configurations that might distract from the core topic of integrating Angular with Localazy.\u003C\u002Fp>\u003Cp>Once the CLI finishes, navigate to your new project directory.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">cd invoice-pwa\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You now have a baseline Angular project with routing and SCSS styling, ideal for adding Angular i18n, \u003Cstrong>\u003Ccode>@angular\u002Flocalize\u003C\u002Fcode>\u003C\u002Fstrong>, or \u003Cstrong>\u003Ccode>ngx-translate\u003C\u002Fcode>\u003C\u002Fstrong> later on in this tutorial.\u003C\u002Fp>\u003Ch3 id=\"project-setup\">Project setup \u003Ca class=\"markdownit-header-anchor\" href=\"#project-setup\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Before you integrate Angular with Localazy, confirm that your base project runs correctly. This step ensures your environment, dependencies, and Angular CLI configuration are all working as expected.\u003C\u002Fp>\u003Cp>Run the following commands:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm install\nnpm start\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Once the development server starts, open your browser and navigate to:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;http:\u002F\u002Flocalhost:4200\u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You should see the \u003Cstrong>default Angular welcome page\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Fimage.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1433\" height=\"652\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F11\u002Fimage.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F11\u002Fimage.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Fimage.png 1433w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"2-step-2-set-up-runtime-i18n-with-ngx-translate\">2️⃣ Step 2: Set up runtime i18n with ngx-translate \u003Ca class=\"markdownit-header-anchor\" href=\"#2-step-2-set-up-runtime-i18n-with-ngx-translate\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Runtime internationalization allows your Angular app to load and switch languages instantly without needing to rebuild. While the built-in Angular i18n \u003Cstrong>\u003Cstrong>is ideal for compile-time translations, this tutorial focuses on ngx-translate\u003C\u002Fstrong>,\u003C\u002Fstrong> a more flexible runtime alternative. We’ll use it and its companion libraries to handle dynamic language changes, and later connect it seamlessly with Localazy for automated translation management.\u003C\u002Fp>\u003Cp>Run the following commands to add the core translation and message formatting packages:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm install @ngx-translate\u002Fcore @ngx-translate\u002Fhttp-loader\nnpm install ngx-translate-messageformat-compiler messageformat\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>These packages provide:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>@ngx-translate\u002Fcore,\u003C\u002Fstrong> the main translation service and pipe.\u003C\u002Fli>\u003Cli>\u003Cstrong>@ngx-translate\u002Fhttp-loader\u003C\u002Fstrong> loads translation files from assets.\u003C\u002Fli>\u003Cli>\u003Cstrong>ngx-translate-messageformat-compiler\u003C\u002Fstrong> and \u003Cstrong>messageformat\u003C\u002Fstrong> enable pluralization and complex message syntax following the ICU Message Format standard (e.g., “{count, plural, one {1 item} other {# items}}”). With \u003Cstrong>ngx-translate\u003C\u002Fstrong> installed, the next step is to give it something to load.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"3-step-3-create-translation-files\">3️⃣ Step 3: Create translation files \u003Ca class=\"markdownit-header-anchor\" href=\"#3-step-3-create-translation-files\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Inside your project, create a dedicated folder for localization files and add two JSON files for your target languages:\u003C\u002Fp>\u003Cpre>\u003Ccode>public\u002Fassets\u002Fi18n\u002Fen.json\npublic\u002Fassets\u002Fi18n\u002Ffr.json\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Each file will hold key-value pairs for translated strings. For example:\u003C\u002Fp>\u003Cp>\u003Cstrong>\u003Ccode>src\u002Fassets\u002Fi18n\u002Fen.json\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"app\": {\n    \"title\": \"Welcome to Your Invoice &amp; Expense Tracker\",\n  },\n  \"lang\": {\n    \"switch\": \"Change Language\",\n    \"en\": \"English\",\n    \"fr\": \"French\"\n  }\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>\u003Ccode>src\u002Fassets\u002Fi18n\u002Ffr.json\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"app\": {\n    \"title\": \"Bienvenue dans votre outil de suivi des factures et des dépenses\",\n    \"welcome\": \"Bienvenue dans notre application !\"\n  },\n  \"lang\": {\n    \"switch\": \"Changer de langue\",\n    \"en\": \"Anglais\",\n    \"fr\": \"Français\"\n  }\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>We’ll later add a \u003Cstrong>\u003Ccode>qps.json\u003C\u002Fcode>\u003C\u002Fstrong> pseudo-locale file, as you saw in the project structure, to show how pseudo-localization helps identify untranslated or hard-coded text during development. This will also be important when syncing with Localazy.\u003C\u002Fp>\u003Ch2 id=\"4-step-4-configure-the-translation-loader\">4️⃣ Step 4: Configure the translation loader \u003Ca class=\"markdownit-header-anchor\" href=\"#4-step-4-configure-the-translation-loader\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>The app needs to know where to fetch translations and how to initialize a default locale. We’ll configure \u003Ccode>TranslateModule\u003C\u002Fcode> to use an HTTP loader that pulls JSON files at runtime. This follows the standard \u003Cstrong>ngx-translate \u003C\u002Fstrong>pattern.\u003C\u002Fp>\u003Cp>Before Angular can fetch your translation files, it needs a loader that knows where to look. The \u003Ccode>HttpLoaderFactory\u003C\u002Fcode> handles this by defining the base path used by \u003Ccode>@ngx-translate\u002Fhttp-loader\u003C\u002Fcode> and plays nicely with sub-path deployments.\u003C\u002Fp>\u003Cp>Create the file:\u003C\u002Fp>\u003Cpre>\u003Ccode>src\u002Fapp\u002Fshared\u002Ftranslate-loader.factory.ts\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Add the following code:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { TranslateLoader } from '@ngx-translate\u002Fcore';\nimport { TranslateHttpLoader } from '@ngx-translate\u002Fhttp-loader';\n\n\u002F**\n * Uses document.baseURI so it also works when the app is deployed under a sub-path.\n * Example URL: &lt;base href=\"\u002Finvoice-pwa\u002F\"&gt;\n *\u002F\nexport function HttpLoaderFactory(): TranslateLoader {\n  return new TranslateHttpLoader();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This factory simply tells Angular where to load translation files from at runtime. It ensures your app fetches language JSONs correctly, even when deployed in subdirectories, and prepares the setup for smooth TMS integration later.\u003C\u002Fp>\u003Ch2 id=\"5-step-5-add-a-custom-missing-translation-handler\">5️⃣ Step 5: Add a custom missing translation handler \u003Ca class=\"markdownit-header-anchor\" href=\"#5-step-5-add-a-custom-missing-translation-handler\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>To make localization easier to debug during development, you can add a custom missing-translation handler. \u003Cstrong>This feature helps identify untranslated keys directly in your templates\u003C\u002Fstrong>, with\u003Cstrong> \u003C\u002Fstrong>no need to check console logs. It’s one of the most useful Angular localization best practices when working with ngx-translate instead of the default Angular i18n compiler approach.\u003C\u002Fp>\u003Cp>Create the file:\u003C\u002Fp>\u003Cpre>\u003Ccode>src\u002Fapp\u002Fcore\u002Fdev-missing.handler.ts\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Add the following code:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate\u002Fcore';\n\nexport class DevMissingHandler implements MissingTranslationHandler {\n  handle(params: MissingTranslationHandlerParams) {\n    \u002F\u002F Loud in dev so you see gaps immediately. Do not enable in production.\n    return `⛔ ${params.key}`;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>To simplify runtime language management, it’s best to \u003Cstrong>wrap all i18n logic inside a small, dedicated service\u003C\u002Fstrong>. Language switching, storage, and fallback logic will then stay consistent across components.\u003C\u002Fp>\u003Cp>Create the file \u003Ccode>src\u002Fapp\u002Fcore\u002Flanguage.service.ts\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>Add the following code:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { Injectable } from '@angular\u002Fcore';\nimport { TranslateService } from '@ngx-translate\u002Fcore';\n\ntype Lang = 'en' | 'fr';\n\n@Injectable({ providedIn: 'root' })\nexport class LanguageService {\n  private readonly storageKey = 'lang';\n  private readonly supported: Lang[] = ['en', 'fr'];\n\n  constructor(private translate: TranslateService) {}\n\n  init(): void {\n    const saved = (localStorage.getItem(this.storageKey) as Lang | null) ?? this.matchNavigator();\n    this.use(saved);\n  }\n\n  use(lang: string): void {\n    const chosen: Lang = this.supported.includes(lang as Lang) ? (lang as Lang) : 'en';\n    this.translate.setDefaultLang('en'); \u002F\u002F fallback\n    this.translate.use(chosen).subscribe({\n      next: () =&gt; localStorage.setItem(this.storageKey, chosen),\n      error: () =&gt; this.translate.use('en'),\n    });\n  }\n\n  private matchNavigator(): Lang {\n    const nav = (navigator.language || navigator.languages?.[0] || 'en').slice(0, 2);\n    return (this.supported as string[]).includes(nav) ? (nav as Lang) : 'en';\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This service handles all \u003Cstrong>runtime language management\u003C\u002Fstrong> for your app. It detects the user’s browser language, applies the right locale, and remembers their choice for future sessions. You’ll initialize this service during app startup (in \u003Ccode>app.ts\u003C\u002Fcode> ) to set the default language as soon as the app loads.\u003C\u002Fp>\u003Cp>Let’s verify everything end-to-end by initializing it in the root component and exposing a \u003Ccode>setLang\u003C\u002Fcode> method to set the default language as soon as the app loads.\u003C\u002Fp>\u003Cp>Update your \u003Ccode>src\u002Fapp\u002Fapp.ts\u003C\u002Fcode> (or your root component) to include the service:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { Component, OnInit } from '@angular\u002Fcore';\nimport { LanguageService } from '.\u002Fcore\u002Flanguage.service';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: '.\u002Fapp.component.html',\n})\nexport class AppComponent implements OnInit {\n  constructor(private lang: LanguageService) {}\n\n  ngOnInit(): void {\n    this.lang.init(); \u002F\u002F picks saved\u002Fbrowser language and sets default fallback\n  }\n\n  setLang(code: 'en' | 'fr'): void {\n    this.lang.use(code);\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Replace your existing code in \u003Cstrong>\u003Ccode>app.html\u003C\u002Fcode>\u003C\u002Fstrong> with the following snippet:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-html\">&lt;header class=\"app-header\"&gt;\n  &lt;h1&gt;{{ 'app.title' | translate }}&lt;\u002Fh1&gt;\n  &lt;div class=\"spacer\"&gt;&lt;\u002Fdiv&gt;\n  &lt;button type=\"button\" (click)=\"setLang('en')\" aria-label=\"Switch to English\"&gt;{{ 'lang.en' | translate }}&lt;\u002Fbutton&gt;\n  &lt;button type=\"button\" (click)=\"setLang('fr')\" aria-label=\"Basculer en français\"&gt;{{ 'lang.fr' | translate }}&lt;\u002Fbutton&gt;\n&lt;\u002Fheader&gt;\n&lt;main class=\"app-main\"&gt;\n  &lt;router-outlet \u002F&gt;\n&lt;\u002Fmain&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Then run a test:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm start\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You should see the title text translated, and the language switches instantly when you click the buttons.\u003C\u002Fp>\u003Ch2 id=\"6-step-6-add-tailwind-css-for-a-consistent-ui\">6️⃣ Step 6: Add Tailwind CSS for a consistent UI \u003Ca class=\"markdownit-header-anchor\" href=\"#6-step-6-add-tailwind-css-for-a-consistent-ui\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>With translations working, it’s time to style your Angular app using \u003Ca href=\"https:\u002F\u002Ftailwindcss.com\u002Fdocs\u002Finstallation\">\u003Cstrong>Tailwind CSS\u003C\u002Fstrong>\u003C\u002Fa>. Tailwind provides a fast, utility-first approach that keeps your UI consistent while integrating Localazy and building multilingual interfaces, a key part of modern Angular localization workflows.\u003C\u002Fp>\u003Ch3 id=\"1-install-dependencies\">1. Install dependencies \u003Ca class=\"markdownit-header-anchor\" href=\"#1-install-dependencies\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Run the following command to add Tailwind and PostCSS:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm i -D tailwindcss @tailwindcss\u002Fpostcss postcss\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Chr>\u003Ch3 id=\"2-create-a-postcss-configuration\">2. Create a PostCSS configuration \u003Ca class=\"markdownit-header-anchor\" href=\"#2-create-a-postcss-configuration\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>In your project root, create \u003Cstrong>.postcssrc.json\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"plugins\": {\n    \"@tailwindcss\u002Fpostcss\": {}\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"3-import-tailwind-into-your-global-stylesheet\">3. Import Tailwind into your global stylesheet \u003Ca class=\"markdownit-header-anchor\" href=\"#3-import-tailwind-into-your-global-stylesheet\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Since the project uses \u003Cstrong>SCSS\u003C\u002Fstrong>, open \u003Cstrong>src\u002Fstyles.scss\u003C\u002Fstrong> and add:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-scss\">@use \"tailwindcss\";\n\n@layer components {\n  .btn {\n    @apply inline-flex items-center gap-2 rounded-lg bg-blue-600 px-3 py-1.5 text-white\n           font-medium shadow hover:bg-blue-700 focus:outline-none\n           focus:ring-2 focus:ring-blue-500\u002F50 active:translate-y-px;\n  }\n\n  .btn-secondary {\n    @apply inline-flex items-center gap-2 rounded-lg border border-gray-300 bg-white\n           px-3 py-1.5 text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none\n           focus:ring-2 focus:ring-gray-400\u002F40;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cblockquote>For more details, refer to the official \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Fguide\u002Ftailwind\">Angular + Tailwind guide\u003C\u002Fa>\u003C\u002Fblockquote>\u003Cp>Now, add the corresponding \u003Cstrong>\u003Ccode>.btn\u003C\u002Fcode>\u003C\u002Fstrong> and \u003Cstrong>\u003Ccode>.btn-secondary\u003C\u002Fcode>\u003C\u002Fstrong> classes to the two language switch buttons in your \u003Ccode>app.html\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch3 id=\"4-restart-the-development-server\">4. Restart the development server \u003Ca class=\"markdownit-header-anchor\" href=\"#4-restart-the-development-server\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Once done, restart your Angular environment to apply the styles and confirm everything works correctly:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">Ctrl + C\nnpm start\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Your Angular app now has Tailwind CSS fully configured, and the localized buttons are styled consistently across languages.\u003C\u002Fp>\u003Cp>\u003Cstrong>You’ve just laid the foundation of your Angular PWA\u003C\u002Fstrong>, setting up runtime i18n with \u003Ccode>ngx-translate\u003C\u002Fcode>, connecting your translation loader, handling missing keys gracefully, and giving the whole app a clean Tailwind base.\u003C\u002Fp>\u003Cp>That’s a big step. You now have a flexible structure ready for real content and real users.\u003C\u002Fp>\u003Ch2 id=\"what-next\">➡️ What next? \u003Ca class=\"markdownit-header-anchor\" href=\"#what-next\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>In the next part, you will bring this foundation to life. \u003Cstrong>You’ll build the core of the invoice dashboard\u003C\u002Fstrong>: creating, editing, and managing invoices with features like printing, exporting, and importing data. Each feature will quietly stay i18n-ready so that, when you move to Part 3, you can seamlessly plug everything into Localazy and localize the entire app in multiple languages, including pseudo-locales, and ICU plurals. See you there! 👋\u003C\u002Fp>","Guide to translating Angular apps with ngx-translate, #1","Learn how to integrate runtime localization with ngx-translate and streamline translations, including ICU plurals, pseudo-locales and PWA enhancements.",{"id":244,"status":8,"created_on":1980,"modified_on":1981,"icon":1982,"header":1983,"description":1984,"button_label":1985,"link":1986},"2022-03-17T12:23:03.000Z","2026-05-25T10:38:47.000Z","member","Why developers love Localazy 💖","From mobile apps to SaaS platforms. See how product teams handle translations without slowing down development.\n","See case studies","case-study",{"slug":1860,"id":1853,"uuid":1988,"title":1859,"html":1989,"comment_id":1853,"feature_image":1863,"featured":15,"visibility":1990,"email_recipient_filter":1991,"created_at":1992,"updated_at":1861,"published_at":1862,"custom_excerpt":1975,"codeinjection_head":1993,"codeinjection_foot":7,"custom_template":7,"canonical_url":7,"authors":1994,"tags":2000,"primary_author":2055,"primary_tag":2056,"url":2057,"excerpt":1975,"reading_time":137,"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":1977,"meta_description":1978,"email_subject":7,"frontmatter":7,"dictionary":1872,"cta":1979,"plainTags":1864},"208b6095-a5ce-466b-89c0-ad7b14681462","\u003Cp>Building invoices is easy; making them feel native in every language is where the real craft lives. In this guide, \u003Cstrong>we’ll turn a simple Angular invoice app into a polished, multilingual experience\u003C\u002Fstrong> using Angular localization library \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fngx-translate\u002Fcore\">ngx-translate\u003C\u002Fa> for runtime i18n and Localazy for a smooth upload-translate-download loop. Along the way, we’ll add ICU plurals, a pseudo-locale for visual QA, and a few PWA touches so your localized app feels fast, offline-friendly, and ready for real users.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%A7%B1-what-youll-build-in-this-tutorial\">🧱 What you'll build in this tutorial\u003C\u002Fh2>\u003Cp>Here’s a quick look at the Angular localization app you’ll create in this tutorial. The video below shows the final result, including the integration with Localazy for managing translations effortlessly.\u003C\u002Fp>\u003Col>\u003Cli>\u003Cstrong>🏗️ Part 1: Foundations\u003C\u002Fstrong>. Set up your Angular project, configure runtime i18n with ngx-translate, handle missing translations, and style everything with Tailwind.\u003C\u002Fli>\u003Cli>\u003Cstrong>📲 Part 2: App logic\u003C\u002Fstrong>. Build the full invoice dashboard and create, edit, delete, print, and export invoices while preparing every element for translation.\u003C\u002Fli>\u003Cli>\u003Cstrong>🌎 Part 3: i18n\u003C\u002Fstrong>.\u003Cstrong> \u003C\u002Fstrong>Integrate Localazy, manage the translation workflow, add pseudo-locales for testing, and use ICU pluralization for dynamic content.\u003C\u002Fli>\u003C\u002Fol>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Finvoice-angular-localazy.gif\" class=\"kg-image\" alt loading=\"lazy\" width=\"1926\" height=\"1060\">\u003C\u002Ffigure>\u003Ch2 id=\"%F0%9F%A7%91%F0%9F%8F%BF%E2%80%8D%F0%9F%92%BB-project-overview\">🧑🏿‍💻 Project overview\u003C\u002Fh2>\u003Cp>In this project, you’ll build a \u003Cstrong>Progressive Web App (PWA)\u003C\u002Fstrong> using \u003Ca href=\"https:\u002F\u002Fangular.dev\u002F\">Angular\u003C\u002Fa> designed to showcase a complete localization workflow. The app manages invoice data, supports multiple languages, and integrates with Localazy for automated translation management.\u003C\u002Fp>\u003Cpre>\u003Ccode>invoice-pwa\u002F\n├── public\u002F\n│   ├── assets\u002F\n│   │   └── i18n\u002F\n│   │       ├── en.json\n│   │       ├── fr.json\n│   │       └── qps.json\n│   ├── icons\u002F\n│   ├── favicon.ico\n│   └── manifest.webmanifest\n│\n├── src\u002F\n│   ├── app\u002F\n│   │   ├── core\u002F\n│   │   │   ├── models\u002F\n│   │   │   │   └── invoice.model.ts\n│   │   │   ├── network\u002F\n│   │   │   │   └── network.service.ts\n│   │   │   ├── persistence\u002F\n│   │   │   │   ├── invoice.repository.ts\n│   │   │   │   └── invoice.serialization.ts\n│   │   │   ├── pwa\u002F\n│   │   │   │   ├── pwa.service.ts\n│   │   │   │   └── update.service.ts\n│   │   │   ├── stores\u002F\n│   │   │   │   └── invoice.store.ts\n│   │   │   ├── utils\u002F\n│   │   │   │   ├── csv.ts\n│   │   │   │   ├── date.ts\n│   │   │   │   ├── files.ts\n│   │   │   │   ├── id.ts\n│   │   │   │   ├── money.ts\n│   │   │   │   ├── time.ts\n│   │   │   │   └── dev-missing.handler.ts\n│   │   │   ├── language.service.ts\n│   │   │   └── locale-format.service.ts\n│   │   │\n│   │   ├── features\u002F\n│   │   │   ├── dashboard\u002F\n│   │   │   │   ├── dashboard.component.html\n│   │   │   │   ├── dashboard.component.scss\n│   │   │   │   └── dashboard.component.ts\n│   │   │   ├── invoice-edit\u002F\n│   │   │   │   ├── invoice-edit.component.html\n│   │   │   │   ├── invoice-edit.component.scss\n│   │   │   │   └── invoice-edit.component.ts\n│   │   │   └── invoice-view\u002F\n│   │   │       ├── invoice-view.component.html\n│   │   │       ├── invoice-view.component.scss\n│   │   │       └── invoice-view.component.ts\n│   │   │\n│   │   ├── shared\u002F\n│   │   │   └── translate-loader.factory.ts\n│   │   ├── app.config.ts\n│   │   ├── app.routes.ts\n│   │   ├── app.html\n│   │   ├── app.scss\n│   │   ├── app.spec.ts\n│   │   ├── app.ts\n│   │   ├── index.html\n│   │   ├── main.ts\n│   │   └── styles.scss\n│\n├── .editorconfig\n├── .gitignore\n├── .postcssrc.json\n├── angular.json\n├── localazy.json\n├── localazy.keys.json\n├── ngsw-config.json\n├── package-lock.json\n├── package.json\n├── [README.md](http:\u002F\u002Freadme.md\u002F)\n├── tailwind.config.js\n├── tsconfig.app.json\n├── tsconfig.json\n└── tsconfig.spec.json\n\nThe folder structure is organized for clarity and\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>For clarity and stability, the folder structure is organized like this:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>\u003Ccode>public\u002Fassets\u002Fi18n\u003C\u002Fcode>\u003C\u002Fstrong> holds all translation files (\u003Ccode>en.json\u003C\u002Fcode>, \u003Ccode>fr.json\u003C\u002Fcode>, and \u003Ccode>qps.json\u003C\u002Fcode>) used by the Angular i18n system.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>src\u002Fapp\u002Fcore\u003C\u002Fcode>\u003C\u002Fstrong> contains essential app logic such as models, data persistence, network handling, and localization services.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>src\u002Fapp\u002Ffeatures\u003C\u002Fcode>\u003C\u002Fstrong> includes feature modules like the dashboard, invoice editor, and invoice viewer that demonstrate component-based structures in Angular.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ccode>src\u002Fapp\u002Fshared\u003C\u002Fcode>\u003C\u002Fstrong> provides shared utilities like the custom translation loader used to connect \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fngx-translate\u002Fcore\">ngx-translate\u003C\u002Fa> with Localazy.\u003C\u002Fli>\u003Cli>\u003Cstrong>Root files\u003C\u002Fstrong> such as \u003Ccode>angular.json\u003C\u002Fcode>, \u003Ccode>localazy.json\u003C\u002Fcode>, and \u003Ccode>tailwind.config.js\u003C\u002Fcode> define build configuration, localization settings, and global styling via \u003Ca href=\"https:\u002F\u002Ftailwindcss.com\u002Fdocs\u002Finstallation\">Tailwind CSS\u003C\u002Fa>.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>This modular setup will make our app maintainable while providing a solid foundation for scaling to more languages, features, and environments.\u003C\u002Fp>\u003Ch2 id=\"1%EF%B8%8F%E2%83%A3-step-1-create-a-new-angular-application\">1️⃣ Step 1: Create a new Angular application\u003C\u002Fh2>\u003Cp>To begin integrating \u003Cstrong>Angular i18n\u003C\u002Fstrong> with \u003Cstrong>Localazy\u003C\u002Fstrong>, first scaffold a clean Angular workspace.\u003C\u002Fp>\u003Cp>This ensures your localization setup is consistent and ready for translation file extraction later.\u003C\u002Fp>\u003Cp>Run the following command in your terminal:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-jsx\">npx @angular\u002Fcli@latest new invoice-pwa --routing --style=scss\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>When prompted, select the following options:\u003C\u002Fp>\u003Cul>\u003Cli>Server-Side Rendering (SSR) and Static Site Generation: \u003Cstrong>No\u003C\u002Fstrong>\u003C\u002Fli>\u003Cli>'Zoneless' application without zone.js: \u003Cstrong>No\u003C\u002Fstrong>\u003C\u002Fli>\u003Cli>AI tools configuration: \u003Cstrong>None\u003C\u002Fstrong>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>With this, you'll get a clean environment without extra dependencies or configurations that might distract from the core topic of integrating Angular with Localazy.\u003C\u002Fp>\u003Cp>Once the CLI finishes, navigate to your new project directory.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">cd invoice-pwa\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You now have a baseline Angular project with routing and SCSS styling, ideal for adding Angular i18n, \u003Cstrong>\u003Ccode>@angular\u002Flocalize\u003C\u002Fcode>\u003C\u002Fstrong>, or \u003Cstrong>\u003Ccode>ngx-translate\u003C\u002Fcode>\u003C\u002Fstrong> later on in this tutorial.\u003C\u002Fp>\u003Ch3 id=\"project-setup\">Project setup\u003C\u002Fh3>\u003Cp>Before you integrate Angular with Localazy, confirm that your base project runs correctly. This step ensures your environment, dependencies, and Angular CLI configuration are all working as expected.\u003C\u002Fp>\u003Cp>Run the following commands:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm install\nnpm start\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Once the development server starts, open your browser and navigate to:\u003C\u002Fp>\u003Cpre>\u003Ccode>&lt;http:\u002F\u002Flocalhost:4200\u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You should see the \u003Cstrong>default Angular welcome page\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Fimage.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1433\" height=\"652\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F11\u002Fimage.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F11\u002Fimage.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F11\u002Fimage.png 1433w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"2%EF%B8%8F%E2%83%A3-step-2-set-up-runtime-i18n-with-ngx-translate\">2️⃣ Step 2: Set up runtime i18n with ngx-translate\u003C\u002Fh2>\u003Cp>Runtime internationalization allows your Angular app to load and switch languages instantly without needing to rebuild. While the built-in Angular i18n \u003Cstrong>\u003Cstrong>is ideal for compile-time translations, this tutorial focuses on ngx-translate\u003C\u002Fstrong>,\u003C\u002Fstrong> a more flexible runtime alternative. We’ll use it and its companion libraries to handle dynamic language changes, and later connect it seamlessly with Localazy for automated translation management.\u003C\u002Fp>\u003Cp>Run the following commands to add the core translation and message formatting packages:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm install @ngx-translate\u002Fcore @ngx-translate\u002Fhttp-loader\nnpm install ngx-translate-messageformat-compiler messageformat\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>These packages provide:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>@ngx-translate\u002Fcore,\u003C\u002Fstrong> the main translation service and pipe.\u003C\u002Fli>\u003Cli>\u003Cstrong>@ngx-translate\u002Fhttp-loader\u003C\u002Fstrong> loads translation files from assets.\u003C\u002Fli>\u003Cli>\u003Cstrong>ngx-translate-messageformat-compiler\u003C\u002Fstrong> and \u003Cstrong>messageformat\u003C\u002Fstrong> enable pluralization and complex message syntax following the ICU Message Format standard (e.g., “{count, plural, one {1 item} other {# items}}”). With \u003Cstrong>ngx-translate\u003C\u002Fstrong> installed, the next step is to give it something to load.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"3%EF%B8%8F%E2%83%A3-step-3-create-translation-files\">3️⃣ Step 3: Create translation files\u003C\u002Fh2>\u003Cp>Inside your project, create a dedicated folder for localization files and add two JSON files for your target languages:\u003C\u002Fp>\u003Cpre>\u003Ccode>public\u002Fassets\u002Fi18n\u002Fen.json\npublic\u002Fassets\u002Fi18n\u002Ffr.json\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Each file will hold key-value pairs for translated strings. For example:\u003C\u002Fp>\u003Cp>\u003Cstrong>\u003Ccode>src\u002Fassets\u002Fi18n\u002Fen.json\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"app\": {\n    \"title\": \"Welcome to Your Invoice &amp; Expense Tracker\",\n  },\n  \"lang\": {\n    \"switch\": \"Change Language\",\n    \"en\": \"English\",\n    \"fr\": \"French\"\n  }\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>\u003Ccode>src\u002Fassets\u002Fi18n\u002Ffr.json\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"app\": {\n    \"title\": \"Bienvenue dans votre outil de suivi des factures et des dépenses\",\n    \"welcome\": \"Bienvenue dans notre application !\"\n  },\n  \"lang\": {\n    \"switch\": \"Changer de langue\",\n    \"en\": \"Anglais\",\n    \"fr\": \"Français\"\n  }\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>We’ll later add a \u003Cstrong>\u003Ccode>qps.json\u003C\u002Fcode>\u003C\u002Fstrong> pseudo-locale file, as you saw in the project structure, to show how pseudo-localization helps identify untranslated or hard-coded text during development. This will also be important when syncing with Localazy.\u003C\u002Fp>\u003Ch2 id=\"4%EF%B8%8F%E2%83%A3-step-4-configure-the-translation-loader\">4️⃣ Step 4: Configure the translation loader\u003C\u002Fh2>\u003Cp>The app needs to know where to fetch translations and how to initialize a default locale. We’ll configure \u003Ccode>TranslateModule\u003C\u002Fcode> to use an HTTP loader that pulls JSON files at runtime. This follows the standard \u003Cstrong>ngx-translate \u003C\u002Fstrong>pattern.\u003C\u002Fp>\u003Cp>Before Angular can fetch your translation files, it needs a loader that knows where to look. The \u003Ccode>HttpLoaderFactory\u003C\u002Fcode> handles this by defining the base path used by \u003Ccode>@ngx-translate\u002Fhttp-loader\u003C\u002Fcode> and plays nicely with sub-path deployments.\u003C\u002Fp>\u003Cp>Create the file:\u003C\u002Fp>\u003Cpre>\u003Ccode>src\u002Fapp\u002Fshared\u002Ftranslate-loader.factory.ts\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Add the following code:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { TranslateLoader } from '@ngx-translate\u002Fcore';\nimport { TranslateHttpLoader } from '@ngx-translate\u002Fhttp-loader';\n\n\u002F**\n * Uses document.baseURI so it also works when the app is deployed under a sub-path.\n * Example URL: &lt;base href=\"\u002Finvoice-pwa\u002F\"&gt;\n *\u002F\nexport function HttpLoaderFactory(): TranslateLoader {\n  return new TranslateHttpLoader();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This factory simply tells Angular where to load translation files from at runtime. It ensures your app fetches language JSONs correctly, even when deployed in subdirectories, and prepares the setup for smooth TMS integration later.\u003C\u002Fp>\u003Ch2 id=\"5%EF%B8%8F%E2%83%A3-step-5-add-a-custom-missing-translation-handler\">5️⃣ Step 5: Add a custom missing translation handler\u003C\u002Fh2>\u003Cp>To make localization easier to debug during development, you can add a custom missing-translation handler. \u003Cstrong>This feature helps identify untranslated keys directly in your templates\u003C\u002Fstrong>, with\u003Cstrong> \u003C\u002Fstrong>no need to check console logs. It’s one of the most useful Angular localization best practices when working with ngx-translate instead of the default Angular i18n compiler approach.\u003C\u002Fp>\u003Cp>Create the file:\u003C\u002Fp>\u003Cpre>\u003Ccode>src\u002Fapp\u002Fcore\u002Fdev-missing.handler.ts\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Add the following code:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate\u002Fcore';\n\nexport class DevMissingHandler implements MissingTranslationHandler {\n  handle(params: MissingTranslationHandlerParams) {\n    \u002F\u002F Loud in dev so you see gaps immediately. Do not enable in production.\n    return `⛔ ${params.key}`;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>To simplify runtime language management, it’s best to \u003Cstrong>wrap all i18n logic inside a small, dedicated service\u003C\u002Fstrong>. Language switching, storage, and fallback logic will then stay consistent across components.\u003C\u002Fp>\u003Cp>Create the file \u003Ccode>src\u002Fapp\u002Fcore\u002Flanguage.service.ts\u003C\u002Fcode>\u003C\u002Fp>\u003Cp>Add the following code:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { Injectable } from '@angular\u002Fcore';\nimport { TranslateService } from '@ngx-translate\u002Fcore';\n\ntype Lang = 'en' | 'fr';\n\n@Injectable({ providedIn: 'root' })\nexport class LanguageService {\n  private readonly storageKey = 'lang';\n  private readonly supported: Lang[] = ['en', 'fr'];\n\n  constructor(private translate: TranslateService) {}\n\n  init(): void {\n    const saved = (localStorage.getItem(this.storageKey) as Lang | null) ?? this.matchNavigator();\n    this.use(saved);\n  }\n\n  use(lang: string): void {\n    const chosen: Lang = this.supported.includes(lang as Lang) ? (lang as Lang) : 'en';\n    this.translate.setDefaultLang('en'); \u002F\u002F fallback\n    this.translate.use(chosen).subscribe({\n      next: () =&gt; localStorage.setItem(this.storageKey, chosen),\n      error: () =&gt; this.translate.use('en'),\n    });\n  }\n\n  private matchNavigator(): Lang {\n    const nav = (navigator.language || navigator.languages?.[0] || 'en').slice(0, 2);\n    return (this.supported as string[]).includes(nav) ? (nav as Lang) : 'en';\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This service handles all \u003Cstrong>runtime language management\u003C\u002Fstrong> for your app. It detects the user’s browser language, applies the right locale, and remembers their choice for future sessions. You’ll initialize this service during app startup (in \u003Ccode>app.ts\u003C\u002Fcode> ) to set the default language as soon as the app loads.\u003C\u002Fp>\u003Cp>Let’s verify everything end-to-end by initializing it in the root component and exposing a \u003Ccode>setLang\u003C\u002Fcode> method to set the default language as soon as the app loads.\u003C\u002Fp>\u003Cp>Update your \u003Ccode>src\u002Fapp\u002Fapp.ts\u003C\u002Fcode> (or your root component) to include the service:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-tsx\">import { Component, OnInit } from '@angular\u002Fcore';\nimport { LanguageService } from '.\u002Fcore\u002Flanguage.service';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: '.\u002Fapp.component.html',\n})\nexport class AppComponent implements OnInit {\n  constructor(private lang: LanguageService) {}\n\n  ngOnInit(): void {\n    this.lang.init(); \u002F\u002F picks saved\u002Fbrowser language and sets default fallback\n  }\n\n  setLang(code: 'en' | 'fr'): void {\n    this.lang.use(code);\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Replace your existing code in \u003Cstrong>\u003Ccode>app.html\u003C\u002Fcode>\u003C\u002Fstrong> with the following snippet:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-html\">&lt;header class=\"app-header\"&gt;\n  &lt;h1&gt;{{ 'app.title' | translate }}&lt;\u002Fh1&gt;\n  &lt;div class=\"spacer\"&gt;&lt;\u002Fdiv&gt;\n  &lt;button type=\"button\" (click)=\"setLang('en')\" aria-label=\"Switch to English\"&gt;{{ 'lang.en' | translate }}&lt;\u002Fbutton&gt;\n  &lt;button type=\"button\" (click)=\"setLang('fr')\" aria-label=\"Basculer en français\"&gt;{{ 'lang.fr' | translate }}&lt;\u002Fbutton&gt;\n&lt;\u002Fheader&gt;\n&lt;main class=\"app-main\"&gt;\n  &lt;router-outlet \u002F&gt;\n&lt;\u002Fmain&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Then run a test:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm start\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You should see the title text translated, and the language switches instantly when you click the buttons.\u003C\u002Fp>\u003Ch2 id=\"6%EF%B8%8F%E2%83%A3-step-6-add-tailwind-css-for-a-consistent-ui\">6️⃣ Step 6: Add Tailwind CSS for a consistent UI\u003C\u002Fh2>\u003Cp>With translations working, it’s time to style your Angular app using \u003Ca href=\"https:\u002F\u002Ftailwindcss.com\u002Fdocs\u002Finstallation\">\u003Cstrong>Tailwind CSS\u003C\u002Fstrong>\u003C\u002Fa>. Tailwind provides a fast, utility-first approach that keeps your UI consistent while integrating Localazy and building multilingual interfaces, a key part of modern Angular localization workflows.\u003C\u002Fp>\u003Ch3 id=\"1-install-dependencies\">1. Install dependencies\u003C\u002Fh3>\u003Cp>Run the following command to add Tailwind and PostCSS:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">npm i -D tailwindcss @tailwindcss\u002Fpostcss postcss\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Chr>\u003Ch3 id=\"2-create-a-postcss-configuration\">2. Create a PostCSS configuration\u003C\u002Fh3>\u003Cp>In your project root, create \u003Cstrong>.postcssrc.json\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"plugins\": {\n    \"@tailwindcss\u002Fpostcss\": {}\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"3-import-tailwind-into-your-global-stylesheet\">3. Import Tailwind into your global stylesheet\u003C\u002Fh3>\u003Cp>Since the project uses \u003Cstrong>SCSS\u003C\u002Fstrong>, open \u003Cstrong>src\u002Fstyles.scss\u003C\u002Fstrong> and add:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-scss\">@use \"tailwindcss\";\n\n@layer components {\n  .btn {\n    @apply inline-flex items-center gap-2 rounded-lg bg-blue-600 px-3 py-1.5 text-white\n           font-medium shadow hover:bg-blue-700 focus:outline-none\n           focus:ring-2 focus:ring-blue-500\u002F50 active:translate-y-px;\n  }\n\n  .btn-secondary {\n    @apply inline-flex items-center gap-2 rounded-lg border border-gray-300 bg-white\n           px-3 py-1.5 text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none\n           focus:ring-2 focus:ring-gray-400\u002F40;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cblockquote>For more details, refer to the official \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Fguide\u002Ftailwind\">Angular + Tailwind guide\u003C\u002Fa>\u003C\u002Fblockquote>\u003Cp>Now, add the corresponding \u003Cstrong>\u003Ccode>.btn\u003C\u002Fcode>\u003C\u002Fstrong> and \u003Cstrong>\u003Ccode>.btn-secondary\u003C\u002Fcode>\u003C\u002Fstrong> classes to the two language switch buttons in your \u003Ccode>app.html\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch3 id=\"4-restart-the-development-server\">4. Restart the development server\u003C\u002Fh3>\u003Cp>Once done, restart your Angular environment to apply the styles and confirm everything works correctly:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">Ctrl + C\nnpm start\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Your Angular app now has Tailwind CSS fully configured, and the localized buttons are styled consistently across languages.\u003C\u002Fp>\u003Cp>\u003Cstrong>You’ve just laid the foundation of your Angular PWA\u003C\u002Fstrong>, setting up runtime i18n with \u003Ccode>ngx-translate\u003C\u002Fcode>, connecting your translation loader, handling missing keys gracefully, and giving the whole app a clean Tailwind base.\u003C\u002Fp>\u003Cp>That’s a big step. You now have a flexible structure ready for real content and real users.\u003C\u002Fp>\u003Ch2 id=\"%E2%9E%A1%EF%B8%8F-what-next\">➡️ What next?\u003C\u002Fh2>\u003Cp>In the next part, you will bring this foundation to life. \u003Cstrong>You’ll build the core of the invoice dashboard\u003C\u002Fstrong>: creating, editing, and managing invoices with features like printing, exporting, and importing data. Each feature will quietly stay i18n-ready so that, when you move to Part 3, you can seamlessly plug everything into Localazy and localize the entire app in multiple languages, including pseudo-locales, and ICU plurals. See you there! 👋\u003C\u002Fp>","public","none","2025-11-07T21:58:35.000+01:00","{\"intercomArticleUrl\":\"\"}",[1995],{"id":1855,"name":1856,"slug":1857,"profile_image":1858,"cover_image":7,"bio":1996,"website":1997,"location":1998,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"url":1999},"Curious technical writer who loves turning complex tools into clear, helpful documentation for developers.","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fkevine-nzapdi\u002F","Yaoundé, Cameroon","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Fkevine-nzapdi\u002F",[2001,2004,2007,2010,2015,2020,2025,2030,2035,2040,2045,2050],{"id":2002,"name":1866,"slug":1866,"description":7,"feature_image":7,"visibility":1990,"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":2003},"60f567ab6f8ebe0001bd80ec","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fi18n\u002F",{"id":2005,"name":495,"slug":494,"description":495,"feature_image":7,"visibility":1990,"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":2006},"60a37fc7cf7b6a0001d1f10b","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fangular\u002F",{"id":2008,"name":1870,"slug":1871,"description":7,"feature_image":7,"visibility":1990,"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":2009},"6556628a0470910001941ffe","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Ftutorial\u002F",{"id":2011,"name":2012,"slug":2013,"description":1984,"feature_image":7,"visibility":1990,"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":2014},"60a37fc7cf7b6a0001d1f11b","[CTA] Why developers love Localazy 💖","cta-13","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-13\u002F",{"id":2016,"name":2017,"slug":2018,"description":1877,"feature_image":7,"visibility":1990,"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":2019},"60a37fc7cf7b6a0001d1f162","[DICT] Angular","term-69","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-69\u002F",{"id":2021,"name":2022,"slug":2023,"description":1887,"feature_image":7,"visibility":1990,"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":2024},"66e40c7034f1ce00011a32cf","[DICT] i18n ","term-192","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-192\u002F",{"id":2026,"name":2027,"slug":2028,"description":1905,"feature_image":7,"visibility":1990,"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":2029},"67f7fb3563350c0001d58fee","[DICT] ICU Message Format","term-255","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-255\u002F",{"id":2031,"name":2032,"slug":2033,"description":1924,"feature_image":7,"visibility":1990,"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":2034},"67fff99063350c0001d594f8","[DICT] CLI","term-284","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-284\u002F",{"id":2036,"name":2037,"slug":2038,"description":7,"feature_image":7,"visibility":1990,"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":2039},"64710a2f047091000193ca3d","[INTERCOM]","intercom","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fintercom\u002F",{"id":2041,"name":2042,"slug":2043,"description":1941,"feature_image":7,"visibility":1990,"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":2044},"69147f7163350c0001d61910","[DICT] ngx-translate","term-426","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-426\u002F",{"id":2046,"name":2047,"slug":2048,"description":1956,"feature_image":7,"visibility":1990,"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":2049},"691481ba63350c0001d61925","[DICT] Pseudo-locale","term-428","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-428\u002F",{"id":2051,"name":2052,"slug":2053,"description":7,"feature_image":7,"visibility":1990,"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":2054},"60fffb486f8ebe0001bd8ddd","[COMSHARE]","comshare","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcomshare\u002F",{"id":1855,"name":1856,"slug":1857,"profile_image":1858,"cover_image":7,"bio":1996,"website":1997,"location":1998,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"url":1999},{"id":2002,"name":1866,"slug":1866,"description":7,"feature_image":7,"visibility":1990,"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":2003},"https:\u002F\u002Fghost.localazy.com\u002Fguide-to-translate-angular-apps-with-ngx-translate-foundations\u002F",[2059,2075,2098],{"id":2060,"owner":2061,"created_by":7,"sort":7,"title":2062,"slug":2063,"modified_on":764,"created_on":2064,"pinned":15,"badge":7,"priority":1824,"main_image":2065,"status":8,"tags":2066,"dictionary":2074,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"60a37fc7cf7b6a0001d1f1d1",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"An overview of software localization and i18n tools (2022)","overview-software-localization-i18n-tools-2021","2021-05-02T15:08:51.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2022\u002F04\u002FSoftware-localization-overview22.png",[2067,2069,2072,2073],{"id":319,"created_on":1828,"status":8,"label":795,"slug":2068,"on_index_page":15},"localazy",{"id":319,"created_on":1828,"status":8,"label":2070,"slug":2071,"on_index_page":15},"Tip","tip",{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1866,"on_index_page":17},[],{"id":2076,"owner":2077,"created_by":7,"sort":7,"title":2082,"slug":2083,"modified_on":764,"created_on":2084,"pinned":15,"badge":7,"priority":1824,"main_image":2085,"status":8,"tags":2086,"dictionary":2097,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"646b7e63047091000193c33b",{"id":2078,"first_name":2079,"last_name":764,"slug":2080,"avatar":2081},"619d2332df4bcb00010bc032","Moyinoluwa Adenuga","moyinoluwa-adenuga","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fadenuga.png","How to localize a NestJS application with nestjs-i18n and Localazy","how-to-localize-a-nestjs-application-with-nestjs-i18n-and-localazy","2023-05-24T14:22:32.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F05\u002Flocalazy-article-nestj-js-1.png",[2087,2090,2091,2094],{"id":1846,"created_on":1828,"status":8,"label":2088,"slug":2089,"on_index_page":15},"NestJS","nestjs",{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1866,"on_index_page":17},{"id":319,"created_on":1828,"status":8,"label":2092,"slug":2093,"on_index_page":15},"HowTo","howto",{"id":319,"created_on":1828,"status":8,"label":2095,"slug":2096,"on_index_page":15},"Automated Localization","automated-localization",[],{"id":2099,"owner":2100,"created_by":7,"sort":7,"title":2105,"slug":2106,"modified_on":764,"created_on":2107,"pinned":15,"badge":7,"priority":1824,"main_image":2108,"status":8,"tags":2109,"dictionary":2116,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"610e58ca6f8ebe0001bd9286",{"id":2101,"first_name":2102,"last_name":764,"slug":2103,"avatar":2104},"6092822ecf7b6a0001d1dab3","David Václavek","david-vaclavek","\u002F\u002Fwww.gravatar.com\u002Favatar\u002F90788a3f3dc9558a151a87d7fe096592?s=250&d=mm&r=x","How to localize Nette app using contributte\u002Ftranslation and Localazy","localize-php-nette-app-using-contributte-translation-localazy","2021-09-07T10:11:37.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F09\u002FHow-to-lokalize-Nette.png",[2110,2114,2115],{"id":2111,"created_on":1828,"status":8,"label":2112,"slug":2113,"on_index_page":15},613703526,"PHP","php",{"id":319,"created_on":1828,"status":8,"label":2092,"slug":2093,"on_index_page":15},{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1866,"on_index_page":17},[],{"id":26,"sort":7,"created_on":2118,"name":2119,"cta_link":2120,"banner_image":2121},"2022-03-17T12:23:14.000Z","default","https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Flocalazy-ai",{"id":2122},"72defd59-a21d-44b9-822c-4e183ca62b99"]