[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-settings":3,"main-navigation":153,"footer-homepage":836,"footer-integrations":903,"blog-post-nav-[USE LATEST FEATURED]":1814,"blog-post-nav-nav":1839,"partnership-delta-n":1856,"faq-embed:\u002Fpartnerships\u002Fdelta-n:::458|459|460":2324},{"id":4,"status":5,"security_section_title":6,"loved_section_title":7,"columns":8,"social_links":113,"policy_links":143},1,"published","Secured & trusted","Loved by users",[9,28,48,74,78],{"id":4,"status":5,"sort":10,"title":11,"column_key":12,"links":13},null,"Localazy","connect",[14,18,23],{"id":15,"status":5,"sort":4,"title":16,"url":17},11,"Book a demo","___LOCALAZY_MEETING_URL___",{"id":19,"status":5,"sort":20,"title":21,"url":22},12,2,"Contact","\u002Fcontact",{"id":24,"status":5,"sort":25,"title":26,"url":27},21,3,"About us","\u002Fabout-us",{"id":20,"status":5,"sort":10,"title":29,"column_key":30,"links":31},"Programs","programs",[32,36,40,44],{"id":4,"status":5,"sort":33,"title":34,"url":35},4,"Partner Program","\u002Fpartnership",{"id":20,"status":5,"sort":37,"title":38,"url":39},5,"Ambassador Program","\u002Fambassador",{"id":25,"status":5,"sort":41,"title":42,"url":43},6,"Startup Program","\u002Ffor\u002Fstartups",{"id":33,"status":5,"sort":45,"title":46,"url":47},7,"Nonprofits","\u002Ffor\u002Fnonprofit",{"id":25,"status":5,"sort":10,"title":49,"column_key":50,"links":51},"Use Cases","use_cases",[52,56,60,64,67,70],{"id":37,"status":5,"sort":53,"title":54,"url":55},8,"Software Localization","\u002Fterm\u002Fsoftware-localization",{"id":41,"status":5,"sort":57,"title":58,"url":59},9,"Machine Translation Services","\u002Ffeatures\u002Fmachine-translation",{"id":45,"status":5,"sort":61,"title":62,"url":63},10,"Translation API","\u002Ffeatures\u002Ftranslation-api",{"id":53,"status":5,"sort":15,"title":65,"url":66},"Crowdsourced Translations","\u002Ffeatures\u002Fshare-tm",{"id":57,"status":5,"sort":19,"title":68,"url":69},"Figma i18n & localization","\u002Ffeatures\u002Ffigma-localization-plugin",{"id":61,"status":5,"sort":71,"title":72,"url":73},13,"Translation as a Service","\u002Fterm\u002Ftranslation-service",{"id":33,"status":5,"sort":10,"title":75,"column_key":76,"links":77},"Integrations","integrations",[],{"id":37,"status":5,"sort":10,"title":79,"column_key":80,"links":81},"Resources","resources",[82,86,90,94,98,102,106,110],{"id":71,"status":5,"sort":83,"title":84,"url":85},14,"Documentation","\u002Fdocs",{"id":83,"status":5,"sort":87,"title":88,"url":89},15,"Dictionary","\u002Fdictionary",{"id":87,"status":5,"sort":91,"title":92,"url":93},16,"Case Studies","\u002Fcase-study",{"id":91,"status":5,"sort":95,"title":96,"url":97},17,"Discussion forum","___DISCUSS_URL___",{"id":95,"status":5,"sort":99,"title":100,"url":101},18,"Localization Blog","\u002Fblog",{"id":99,"status":5,"sort":103,"title":104,"url":105},19,"FAQ","\u002Ffaq",{"id":103,"status":5,"sort":107,"title":108,"url":109},20,"Pricing","\u002Fpricing",{"id":107,"status":5,"sort":24,"title":111,"url":112},"Brand assets","https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Fu\u002F1\u002Ffolders\u002F1tZqsZHBlGelz7A2FwTsiwrs4j3sd9HTk",[114,119,124,129,134,139],{"id":4,"status":5,"sort":10,"platform":115,"icon":116,"url":117,"label":118},"feed","rss","\u002Ffeed.xml","Localazy RSS Feed",{"id":20,"status":5,"sort":10,"platform":120,"icon":121,"url":122,"label":123},"facebook","fb-logo","https:\u002F\u002Fwww.facebook.com\u002Flocalazy\u002F","Localazy facebook",{"id":25,"status":5,"sort":10,"platform":125,"icon":126,"url":127,"label":128},"github","github-logo","https:\u002F\u002Fgithub.com\u002Flocalazy","Localazy GitHub",{"id":33,"status":5,"sort":10,"platform":130,"icon":131,"url":132,"label":133},"x","x-twitter","https:\u002F\u002Fx.com\u002Flocalazy","Localazy X",{"id":37,"status":5,"sort":10,"platform":135,"icon":136,"url":137,"label":138},"linkedin","linkedin-logo","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002F37836599\u002F","Localazy LinkedIn",{"id":41,"status":5,"sort":10,"platform":140,"icon":141,"url":97,"label":142},"discourse","discourse-logo","Localazy Discourse",[144,147,150],{"id":4,"status":5,"sort":10,"title":145,"url":146,"action":10},"Privacy policy","\u002Fprivacy-policy",{"id":20,"status":5,"sort":10,"title":148,"url":149,"action":10},"Terms & Conditions","\u002Fterms-and-conditions",{"id":25,"status":5,"sort":10,"title":151,"url":10,"action":152},"Cookies","cookie-consent",[154,347,580,708,831,833],{"id":20,"name":155,"url":10,"url_text":10,"status":5,"groups":156},"Solutions",[157,168,239,274],{"navigation_items_group_id":158},{"id":25,"sort":37,"status":5,"name":159,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":162,"show_all_url":10,"represent_as_tile":160,"items":163},"Featured Article",false,"top",true,[164],{"collection":165,"item":166},"blog_post_navigation_item_type",{"id":33,"status":5,"sort":10,"show_author_img":162,"blog_post_tag":167,"description":10},"nav",{"navigation_items_group_id":169},{"id":37,"sort":4,"status":5,"name":170,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":171,"represent_as_tile":162,"items":172},"Your Role","\u002Froles",[173,185,195,205,216,228],{"collection":174,"item":175},"relation_navigation_item_type",{"id":4,"status":5,"sort":10,"name":176,"item":177},"CMO",[178],{"collection":179,"item":180},"personas",{"id":4,"status":5,"sort":10,"slug":181,"icon":182},"chief-marketing-officers",{"id":183,"title":184},"526097d8-176f-48e5-83d3-2fc4d77061f9","La Mail Bulk",{"collection":174,"item":186},{"id":25,"status":5,"sort":10,"name":187,"item":188},"CTO",[189],{"collection":179,"item":190},{"id":33,"status":5,"sort":10,"slug":191,"icon":192},"chief-technical-officers",{"id":193,"title":194},"f808fdf0-c78b-4294-ba59-fe25f46fe825","La Mechanic",{"collection":174,"item":196},{"id":107,"status":5,"sort":10,"name":197,"item":198},"Product Manager",[199],{"collection":179,"item":200},{"id":99,"status":5,"sort":10,"slug":201,"icon":202},"product-managers",{"id":203,"title":204},"ea39586a-21fc-4b34-ba87-496028e5198f","La Worker",{"collection":174,"item":206},{"id":207,"status":5,"sort":10,"name":208,"item":209},37,"Translator",[210],{"collection":179,"item":211},{"id":107,"status":5,"sort":10,"slug":212,"icon":213},"professional-translators",{"id":214,"title":215},"07945171-d51d-4ca8-96c0-21cde9db258f","La Chat",{"collection":174,"item":217},{"id":218,"status":5,"sort":10,"name":219,"item":220},38,"Developer",[221],{"collection":179,"item":222},{"id":223,"status":5,"sort":10,"slug":224,"icon":225},30,"software-developers",{"id":226,"title":227},"1806e46d-c551-4845-bf42-4407344d229e","La Terminal",{"collection":174,"item":229},{"id":230,"status":5,"sort":10,"name":231,"item":232},27,"Localization Manager",[233],{"collection":179,"item":234},{"id":41,"status":5,"sort":10,"slug":235,"icon":236},"localization-managers",{"id":237,"title":238},"dac69bd1-bf5d-41d0-87d4-dd13e314698a","La Language",{"navigation_items_group_id":240},{"id":57,"sort":25,"status":5,"name":241,"render_show_all_url":160,"show_all_url_position":242,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":243},"Use cases","bottom",[244,250,255,260,264,269],{"collection":245,"item":246},"simple_link_navigation_item_type",{"id":247,"status":5,"sort":10,"url":248,"url_text":249,"show_favorite_icon":160},24,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fsoftware-localization","Software localization",{"collection":245,"item":251},{"id":252,"status":5,"sort":10,"url":253,"url_text":254,"show_favorite_icon":160},26,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fmobile-app-localization","Mobile app localization",{"collection":245,"item":256},{"id":257,"status":5,"sort":10,"url":258,"url_text":259,"show_favorite_icon":160},25,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fwebsite-localization","Website localization",{"collection":245,"item":261},{"id":230,"status":5,"sort":10,"url":262,"url_text":263,"show_favorite_icon":160},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fdesign-localization","Design localization",{"collection":245,"item":265},{"id":266,"status":5,"sort":10,"url":267,"url_text":268,"show_favorite_icon":160},28,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fgame-localization","Game localization",{"collection":245,"item":270},{"id":271,"status":5,"sort":10,"url":272,"url_text":273,"show_favorite_icon":160},29,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fhelp-and-docs-localization","Help & docs localization",{"navigation_items_group_id":275},{"id":53,"sort":20,"status":5,"name":276,"render_show_all_url":160,"show_all_url_position":242,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":277},"Industry",[278,289,300,310,320,329,340],{"collection":174,"item":279},{"id":280,"status":5,"sort":10,"name":281,"item":282},23,"Digital Agencies",[283],{"collection":179,"item":284},{"id":45,"status":5,"sort":10,"slug":285,"icon":286},"digital-agencies",{"id":287,"title":288},"547f5619-b21d-4b29-86f1-8b2200313cde","La Digi Agency",{"collection":174,"item":290},{"id":291,"status":5,"sort":10,"name":292,"item":293},39,"Startups & SaaS",[294],{"collection":179,"item":295},{"id":20,"status":5,"sort":10,"slug":296,"icon":297},"startups",{"id":298,"title":299},"da1516e2-4afc-40a2-bcbf-a8161e2d610d","La Saa S",{"collection":174,"item":301},{"id":20,"status":5,"sort":10,"name":302,"item":303},"E-commerce",[304],{"collection":179,"item":305},{"id":37,"status":5,"sort":10,"slug":306,"icon":307},"e-commerce",{"id":308,"title":309},"a3d09cd2-054f-4bb5-a0a2-d3d207db65df","La Ecommerce",{"collection":174,"item":311},{"id":103,"status":5,"sort":10,"name":312,"item":313},"FinTech Platforms",[314],{"collection":179,"item":315},{"id":230,"status":5,"sort":10,"slug":316,"icon":317},"fintech",{"id":318,"title":319},"147339ba-07d1-4e5e-baad-23d27e60c919","La Money",{"collection":174,"item":321},{"id":247,"status":5,"sort":10,"name":322,"item":323},"Translation Agencies",[324],{"collection":179,"item":325},{"id":247,"status":5,"sort":10,"slug":326,"icon":327},"translation-agencies",{"id":328,"title":238},"15d6fe33-2af8-4d6e-933d-5caa64394511",{"collection":174,"item":330},{"id":331,"status":5,"sort":10,"name":332,"item":333},22,"Travel & Tourism",[334],{"collection":179,"item":335},{"id":25,"status":5,"sort":10,"slug":336,"icon":337},"tourism",{"id":338,"title":339},"23a785e8-0ae5-4c4b-8452-aab1b58182a6","La Travel",{"collection":174,"item":341},{"id":257,"status":5,"sort":10,"name":342,"item":343},"Nonprofit Causes",[344],{"collection":179,"item":345},{"id":266,"status":5,"sort":10,"slug":346,"icon":10},"nonprofit",{"id":37,"name":348,"url":10,"url_text":10,"status":5,"groups":349},"Features",[350,417,474,523],{"navigation_items_group_id":351},{"id":15,"sort":41,"status":5,"name":352,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":353},"Localization",[354,363,372,380,388,392,400,409],{"collection":174,"item":355},{"id":356,"status":5,"sort":10,"name":357,"item":358},44,"Localization services",[359],{"collection":360,"item":361},"products",{"id":57,"status":5,"slug":362},"continuous-localization-team",{"collection":174,"item":364},{"id":365,"status":5,"sort":10,"name":366,"item":367},45,"Translation management",[368],{"collection":369,"item":370},"term_landing_page",{"id":271,"status":5,"slug":371},"translation-management-system",{"collection":174,"item":373},{"id":374,"status":5,"sort":10,"name":375,"item":376},46,"Context Screenshots",[377],{"collection":360,"item":378},{"id":71,"status":5,"slug":379},"context-screenshots-ocr",{"collection":174,"item":381},{"id":382,"status":5,"sort":10,"name":383,"item":384},47,"Translation Glossary",[385],{"collection":360,"item":386},{"id":95,"status":5,"slug":387},"glossary",{"collection":245,"item":389},{"id":33,"status":5,"sort":10,"url":390,"url_text":391,"show_favorite_icon":160},"\u002Fdocs\u002Fgeneral\u002Freviewing-translations","Quality control",{"collection":174,"item":393},{"id":394,"status":5,"sort":10,"name":395,"item":396},34,"Connected Projects",[397],{"collection":360,"item":398},{"id":4,"status":5,"slug":399},"connected-projects",{"collection":174,"item":401},{"id":402,"status":5,"sort":10,"name":403,"item":404},64,"Plural handling",[405],{"collection":360,"item":406},{"id":407,"status":5,"slug":408},32,"plurals",{"collection":174,"item":410},{"id":411,"status":5,"sort":10,"name":412,"item":413},65,"Style guides",[414],{"collection":360,"item":415},{"id":218,"status":5,"slug":416},"style-guide",{"navigation_items_group_id":418},{"id":19,"sort":45,"status":5,"name":419,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":420},"Translation",[421,429,437,441,449,457,466],{"collection":174,"item":422},{"id":423,"status":5,"sort":10,"name":424,"item":425},36,"Professional translations",[426],{"collection":369,"item":427},{"id":223,"status":5,"slug":428},"professional-translation-services",{"collection":174,"item":430},{"id":431,"status":5,"sort":10,"name":432,"item":433},48,"Crowdsourced translations",[434],{"collection":360,"item":435},{"id":53,"status":5,"slug":436},"share-tm",{"collection":245,"item":438},{"id":37,"status":5,"sort":10,"url":439,"url_text":440,"show_favorite_icon":160},"\u002Fdocs\u002Fgeneral\u002Ftranslating-strings","Translation interface",{"collection":174,"item":442},{"id":443,"status":5,"sort":10,"name":444,"item":445},55,"Machine translations",[446],{"collection":360,"item":447},{"id":37,"status":5,"slug":448},"machine-translation",{"collection":174,"item":450},{"id":451,"status":5,"sort":10,"name":452,"item":453},60,"Localazy AI translation",[454],{"collection":360,"item":455},{"id":271,"status":5,"slug":456},"localazy-ai",{"collection":174,"item":458},{"id":459,"status":5,"sort":10,"name":460,"item":461},61,"Translation Memory",[462],{"collection":360,"item":463},{"id":464,"status":5,"slug":465},35,"translation-memory",{"collection":174,"item":467},{"id":468,"status":5,"sort":10,"name":469,"item":470},63,"Code & placeholders",[471],{"collection":360,"item":472},{"id":223,"status":5,"slug":473},"code-and-placeholders",{"navigation_items_group_id":475},{"id":71,"sort":53,"status":5,"name":476,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":477},"Management",[478,482,490,498,507,515,519],{"collection":245,"item":479},{"id":53,"status":5,"sort":10,"url":480,"url_text":481,"show_favorite_icon":160},"\u002Fdocs\u002Fgeneral\u002Fdefining-user-roles","User roles",{"collection":174,"item":483},{"id":484,"status":5,"sort":10,"name":485,"item":486},51,"Duplicity Linking",[487],{"collection":360,"item":488},{"id":103,"status":5,"slug":489},"duplicity-linking",{"collection":174,"item":491},{"id":492,"status":5,"sort":10,"name":493,"item":494},52,"Language Permissions",[495],{"collection":360,"item":496},{"id":24,"status":5,"slug":497},"language-permissions",{"collection":174,"item":499},{"id":500,"status":501,"sort":10,"name":502,"item":503},53,"draft","Automations",[504],{"collection":360,"item":505},{"id":107,"status":5,"slug":506},"automations",{"collection":174,"item":508},{"id":509,"status":5,"sort":10,"name":510,"item":511},58,"Branching",[512],{"collection":360,"item":513},{"id":230,"status":5,"slug":514},"branching",{"collection":245,"item":516},{"id":24,"status":501,"sort":10,"url":517,"url_text":518,"show_favorite_icon":160},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fsso-configuration","SSO",{"collection":245,"item":520},{"id":331,"status":501,"sort":10,"url":521,"url_text":522,"show_favorite_icon":160},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Flanguage-statistics","Reporting",{"navigation_items_group_id":524},{"id":83,"sort":57,"status":5,"name":525,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":526},"Development",[527,533,541,548,555,563,572],{"collection":174,"item":528},{"id":271,"status":5,"sort":10,"name":62,"item":529},[530],{"collection":360,"item":531},{"id":15,"status":5,"slug":532},"translation-api",{"collection":174,"item":534},{"id":535,"status":5,"sort":10,"name":536,"item":537},33,"Localazy CLI",[538],{"collection":360,"item":539},{"id":45,"status":5,"slug":540},"cli",{"collection":174,"item":542},{"id":407,"status":5,"sort":10,"name":543,"item":544},"Language CDN",[545],{"collection":360,"item":546},{"id":33,"status":5,"slug":547},"language-cdn",{"collection":174,"item":549},{"id":266,"status":5,"sort":10,"name":550,"item":551},"Releases",[552],{"collection":360,"item":553},{"id":41,"status":5,"slug":554},"releases",{"collection":174,"item":556},{"id":557,"status":501,"sort":10,"name":558,"item":559},57,"Format Conversions",[560],{"collection":360,"item":561},{"id":20,"status":5,"slug":562},"format-conversions",{"collection":174,"item":564},{"id":565,"status":5,"sort":10,"name":566,"item":567},59,"Webhooks",[568],{"collection":360,"item":569},{"id":570,"status":5,"slug":571},31,"webhooks",{"collection":174,"item":573},{"id":574,"status":5,"sort":10,"name":575,"item":576},62,"Export Aliases",[577],{"collection":360,"item":578},{"id":535,"status":5,"slug":579},"export-aliases",{"id":33,"name":75,"url":10,"url_text":10,"status":5,"groups":581},[582,698],{"navigation_items_group_id":583},{"id":45,"sort":61,"status":5,"name":584,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":585},"Most popular",[586],{"collection":174,"item":587},{"id":19,"status":5,"sort":10,"name":75,"item":588},[589,597,604,611,618,624,631,638,645,652,659,668,675,682,690],{"collection":590,"item":591},"platforms",{"id":41,"status":5,"sort":4,"slug":592,"name":593,"icon":594},"android","Android",{"id":595,"title":596},"ff965add-53b0-44ad-b27c-ea4ef641d384","Ic Outline Android",{"collection":590,"item":598},{"id":45,"status":5,"sort":20,"slug":599,"name":600,"icon":601},"ios","iOS",{"id":602,"title":603},"886285d7-816a-4430-b5a5-edfe307b238e","Ios",{"collection":590,"item":605},{"id":535,"status":5,"sort":25,"slug":606,"name":607,"icon":608},"react","React",{"id":609,"title":610},"26757a90-88a3-4a94-b587-9f38614ed3bd","Logos React",{"collection":590,"item":612},{"id":103,"status":5,"sort":33,"slug":613,"name":614,"icon":615},"vuejs","Vue.js",{"id":616,"title":617},"6180b41f-3249-47d3-adcd-50fe1cf11bf1","Vue",{"collection":590,"item":619},{"id":91,"status":5,"sort":37,"slug":620,"name":621,"icon":622},"angular","Angular",{"id":623,"title":621},"2a31a97a-48c5-4531-aa36-41c9dd0bdbef",{"collection":590,"item":625},{"id":4,"status":5,"sort":41,"slug":626,"name":627,"icon":628},"flutter","Flutter",{"id":629,"title":630},"b9f13a11-9328-4a03-86cf-b20de0685606","Logos Flutter",{"collection":590,"item":632},{"id":25,"status":5,"sort":15,"slug":633,"name":634,"icon":635},"typescript","TypeScript",{"id":636,"title":637},"8d1319b5-8a96-4199-8407-00add3418b1f","Logos Typescript Icon",{"collection":590,"item":639},{"id":570,"status":5,"sort":19,"slug":640,"name":641,"icon":642},"javascript","JavaScript",{"id":643,"title":644},"4218d0c9-7e6b-494d-9663-37ceaf93ee8c","Logos Javascript",{"collection":590,"item":646},{"id":19,"status":5,"sort":107,"slug":647,"name":648,"icon":649},"json","JSON",{"id":650,"title":651},"99ac3b7c-dba5-4693-a4f4-1f27a6d7782d","Logos Json",{"collection":590,"item":653},{"id":24,"status":5,"sort":24,"slug":654,"name":655,"icon":656},"xliff","XLIFF",{"id":657,"title":658},"ca424cc8-e8a7-4aef-8dca-ef4a4d1334fc","Format",{"collection":590,"item":660},{"id":661,"status":5,"sort":662,"slug":663,"name":664,"icon":665},72,54,"strapi","Strapi",{"id":666,"title":667},"cde7f1d0-f2e0-4243-929e-a3f8f9146e69","Strapi Logo Purple",{"collection":590,"item":669},{"id":451,"status":5,"sort":443,"slug":670,"name":671,"icon":672},"figma","Figma",{"id":673,"title":674},"813745a4-a77d-4735-93b7-e0dd731b2304","Figma Icon",{"collection":590,"item":676},{"id":484,"status":5,"sort":382,"slug":677,"name":678,"icon":679},"microsoft-excel","Microsoft Excel",{"id":680,"title":681},"7a175955-7b96-4561-939f-a0e1924faa40","Excel",{"collection":590,"item":683},{"id":684,"status":5,"sort":459,"slug":685,"name":686,"icon":687},66,"github-actions","GitHub Actions",{"id":688,"title":689},"da17554f-ac6d-443d-9bac-1f29645ec1c6","Github Icon",{"collection":590,"item":691},{"id":692,"status":5,"sort":693,"slug":694,"name":695,"icon":696},97,999,"webflow","Webflow",{"id":697,"title":695},"ff43a386-52f8-499f-b77c-ab9a30f4a77e",{"navigation_items_group_id":699},{"id":33,"sort":15,"status":5,"name":700,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":701},"Explore more",[702],{"collection":703,"item":704},"text_link_navigation_item_type",{"id":4,"status":5,"sort":10,"text":705,"url":706,"url_text":707},"Localazy is a technology-agnostic platform supporting 50+ frameworks, file formats & popular tools.","\u002Fintegrations","See all integrations",{"id":4,"name":79,"url":10,"url_text":10,"status":5,"groups":709},[710,734,740],{"navigation_items_group_id":711},{"id":4,"sort":19,"status":5,"name":712,"render_show_all_url":160,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":10,"represent_as_tile":160,"items":713},"Helpful Links",[714,717,719,723,725,728,730],{"collection":245,"item":715},{"id":71,"status":5,"sort":10,"url":101,"url_text":716,"show_favorite_icon":162},"Localazy Blog",{"collection":245,"item":718},{"id":83,"status":5,"sort":10,"url":85,"url_text":84,"show_favorite_icon":162},{"collection":245,"item":720},{"id":4,"status":5,"sort":10,"url":721,"url_text":722,"show_favorite_icon":160},"https:\u002F\u002Fdiscuss.localazy.com\u002F","Discussion Forum",{"collection":245,"item":724},{"id":19,"status":5,"sort":10,"url":93,"url_text":92,"show_favorite_icon":160},{"collection":245,"item":726},{"id":25,"status":5,"sort":10,"url":35,"url_text":727,"show_favorite_icon":160},"Become a Partner",{"collection":245,"item":729},{"id":87,"status":5,"sort":10,"url":105,"url_text":104,"show_favorite_icon":160},{"collection":245,"item":731},{"id":95,"status":5,"sort":10,"url":732,"url_text":733,"show_favorite_icon":160},"\u002Ftags\u002Frelease-update","Release Updates",{"navigation_items_group_id":735},{"id":20,"sort":83,"status":5,"name":716,"render_show_all_url":162,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":101,"represent_as_tile":160,"items":736},[737],{"collection":165,"item":738},{"id":25,"status":5,"sort":10,"show_author_img":160,"blog_post_tag":739,"description":10},"[USE LATEST FEATURED]",{"navigation_items_group_id":741},{"id":41,"sort":71,"status":5,"name":84,"render_show_all_url":162,"show_all_url_position":161,"show_favorite_icon":160,"show_all_url":85,"represent_as_tile":160,"items":742},[743,757,769,780,792,802,813,821],{"collection":174,"item":744},{"id":33,"status":5,"sort":10,"name":745,"item":746},"General",[747],{"collection":748,"item":749},"docs_section",{"id":20,"status":5,"sort":4,"slug":750,"name":745,"icon":751,"featured_icon":754},"general",{"id":752,"title":753},"423101f1-308c-42f1-8dfe-53272019e7cb","Global",{"id":755,"title":756},"0f7ca4cb-dc3b-4f62-b476-132ed5c4931f","General Doc",{"collection":174,"item":758},{"id":37,"status":5,"sort":10,"name":759,"item":760},"CLI",[761],{"collection":748,"item":762},{"id":25,"status":5,"sort":20,"slug":540,"name":759,"icon":763,"featured_icon":766},{"id":764,"title":765},"2f7a4573-8265-4d76-8d55-ce0cc79b8983","Cli",{"id":767,"title":768},"3f76ff7b-0e74-4046-bb03-4ca99c3b66d5","Doc Cat Cli",{"collection":174,"item":770},{"id":53,"status":5,"sort":10,"name":771,"item":772},"API",[773],{"collection":748,"item":774},{"id":107,"status":5,"sort":25,"slug":775,"name":771,"icon":776,"featured_icon":777},"api",{"id":764,"title":765},{"id":778,"title":779},"20866781-e69b-4e01-9456-05437487b75c","API Doc",{"collection":174,"item":781},{"id":782,"status":5,"sort":10,"name":783,"item":784},50,"CDN",[785],{"collection":748,"item":786},{"id":252,"status":5,"sort":33,"slug":787,"name":783,"icon":788,"featured_icon":789},"cdn",{"id":752,"title":753},{"id":790,"title":791},"a8ee9cb7-4e02-41f0-b595-eb518c3085b6","Doc Cat Cdn",{"collection":174,"item":793},{"id":41,"status":5,"sort":10,"name":593,"item":794},[795],{"collection":748,"item":796},{"id":4,"status":5,"sort":37,"slug":592,"name":593,"icon":797,"featured_icon":799},{"id":798,"title":593},"fb8329ae-0c0c-4fbc-bcdc-83f2eeda1039",{"id":800,"title":801},"f7c0dec8-5b42-4943-ab3a-e3665723ad6f","Doc Cat Android",{"collection":174,"item":803},{"id":45,"status":5,"sort":10,"name":600,"item":804},[805],{"collection":748,"item":806},{"id":33,"status":5,"sort":41,"slug":599,"name":600,"icon":807,"featured_icon":810},{"id":808,"title":809},"289e136c-55df-4d51-847b-1782a2308ee4","Ios Blue",{"id":811,"title":812},"2968d3f0-14b5-4427-82e7-f1ea2de17846","Doc Cat Ios",{"collection":174,"item":814},{"id":57,"status":5,"sort":10,"name":671,"item":815},[816],{"collection":748,"item":817},{"id":24,"status":5,"sort":45,"slug":670,"name":671,"icon":818,"featured_icon":819},{"id":764,"title":765},{"id":820,"title":671},"f5e66b5b-a439-47f6-af4a-6ad261de2e87",{"collection":174,"item":822},{"id":61,"status":5,"sort":10,"name":664,"item":823},[824],{"collection":748,"item":825},{"id":280,"status":5,"sort":53,"slug":663,"name":664,"icon":826,"featured_icon":828},{"id":827,"title":664},"3b4b03c7-e131-49e6-a014-c8c2c8a2751e",{"id":829,"title":830},"1dd05c76-e517-4aea-a3d8-49cfddb40056","Strapi Doc",{"id":25,"name":108,"url":109,"url_text":108,"status":5,"groups":832},[],{"id":41,"name":16,"url":834,"url_text":16,"status":5,"groups":835},"\u002Fbook-demo",[],{"status":5,"header_badges":837,"footer_badges":855,"footer_secured_badges":861,"slider_badges":873},[838,845,850],{"id":4,"status":5,"sort":10,"link":839,"title":840,"badgeType":841,"badgeName":842,"metadata":10,"image":843},"https:\u002F\u002Fwww.g2.com\u002Fproducts\u002Flocalazy\u002Freviews","Best meets requirements","Other","G2-winter-24-best-meets-requirments",{"id":844},"8d5dd6fd-6995-4c92-8219-a6ed5ba6acdc",{"id":20,"status":5,"sort":10,"link":839,"title":846,"badgeType":841,"badgeName":847,"metadata":10,"image":848},"Best support","G2-winter-24-best-support",{"id":849},"e59dd465-84d9-45c7-987d-dd4048fd6992",{"id":25,"status":5,"sort":10,"link":839,"title":851,"badgeType":841,"badgeName":852,"metadata":10,"image":853},"Easiest admin","G2-winter-24-easiest-admin",{"id":854},"5f12c4c8-bec0-47cf-87b4-a4502e9f1bd2",[856],{"id":19,"status":5,"sort":10,"link":839,"title":857,"badgeType":841,"badgeName":858,"metadata":10,"image":859},"Users love us","Users love us 25",{"id":860},"232416a5-86ba-4be6-85a5-b88802003d53",[862,868],{"id":15,"status":5,"sort":10,"link":863,"title":864,"badgeType":841,"badgeName":865,"metadata":10,"image":866},"https:\u002F\u002Fsprinto.com\u002Fget-iso-27001\u002F","Sprinto ISO 27001","Sprinto ISO 27001 certificate",{"id":867},"c1c6c06c-6caf-4b78-8a7e-9606c395eb61",{"id":71,"status":5,"sort":10,"link":869,"title":870,"badgeType":841,"badgeName":870,"metadata":10,"image":871},"https:\u002F\u002Fwww.aicpa.org\u002Fsoc4so","SOC certificate",{"id":872},"4f4bc0a6-09a0-41df-8295-8f990d96d941",[874,880,884,888,892,896,901],{"id":37,"status":5,"sort":10,"link":839,"title":875,"badgeType":841,"badgeName":876,"metadata":877,"image":878},"Most likely to recommend","a","",{"id":879},"da055731-3f11-4fc7-96f2-c11c0b84c831",{"id":41,"status":5,"sort":10,"link":839,"title":881,"badgeType":841,"badgeName":10,"metadata":10,"image":882},"EMEA High Performer",{"id":883},"586fb488-81f2-41db-a4e8-ef309e50c0e6",{"id":45,"status":5,"sort":10,"link":839,"title":885,"badgeType":841,"badgeName":10,"metadata":10,"image":886},"Ease of Doing Business With",{"id":887},"bfa26865-430e-463d-9886-cb56a8a8ecf6",{"id":53,"status":5,"sort":10,"link":839,"title":889,"badgeType":841,"badgeName":10,"metadata":10,"image":890},"High Performer",{"id":891},"2cc1ba0f-c23a-4c97-ad4a-a655c97466fe",{"id":57,"status":5,"sort":10,"link":839,"title":893,"badgeType":841,"badgeName":10,"metadata":10,"image":894},"Fastest Implementation",{"id":895},"6f297758-1c95-45f4-a6e9-528319897132",{"id":61,"status":5,"sort":10,"link":897,"title":898,"badgeType":841,"badgeName":10,"metadata":10,"image":899},"https:\u002F\u002Fwww.intercert.com\u002Fservices\u002Fgovernance-risk-compliance\u002Fiso-iec-27001","Intercert ISO 27001",{"id":900},"0521a5f1-e1f2-4da6-a2bc-dc92773f2a7b",{"id":15,"status":5,"sort":10,"link":863,"title":864,"badgeType":841,"badgeName":865,"metadata":10,"image":902},{"id":867},[904,1044,1122,1228,1314,1393,1482,1573,1660,1759],{"id":535,"status":5,"created_on":905,"modified_on":906,"name":607,"slug":606,"description":907,"docs_link":908,"priority":10,"has_sdk":160,"sort":25,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":909,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"is_enterprise":160,"is_popular":160,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":913,"upload_features":914,"icon":915,"meta_image":916,"primary_tag":918,"tags":934,"integration_methods":952,"recommended_methods":1028,"default_integration_method":1029,"faq_categories":1036,"translations":1042,"platforms_id":535},"2022-03-18T08:09:24.000Z","2025-02-26T13:36:08.000Z","Manage your React app translations with Localazy, a continuous localization tool. React i18n done right. ","\u002Fdocs\u002Fcli\u002Fjson-format","JSON format support","CLI support","react-i18next and more","Use Localazy to translate your React projects with your favorite i18n library.",{"json":647},[],{"id":609},{"id":917},"a97492ec-ee8d-429c-bf66-d0fe59b6e5c9",{"id":37,"status":5,"sort":20,"created_on":919,"label":920,"hidden":160,"icon":921,"translations":923},"2022-03-17T12:23:44.000Z","Web apps",{"id":922},"c9e70e4f-8136-432a-8d82-53c3501a9eb4",[924,926,929,932],{"id":37,"languages_code":925,"label":920},"xxa",{"id":365,"languages_code":927,"label":928},"es","Aplicaciones web",{"id":782,"languages_code":930,"label":931},"cs","Webové aplikace",{"id":565,"languages_code":933,"label":920},"en",[935,942],{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":936,"translations":937},{"id":922},[938,939,940,941],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":53,"status":5,"sort":57,"label":943,"hidden":160,"created_on":944,"icon":10,"translations":945},"Framework","2022-03-17T12:23:45.000Z",[946,947,949,950],{"id":53,"languages_code":925,"label":943},{"id":500,"languages_code":927,"label":948},"Marco",{"id":451,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},67,[953,965,990,1011],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":956},"Translate strings directly or upload them into your Localazy project.","\u002Fdocs\u002Fapi\u002Fintroduction",[957,958,961,963],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},40,"Utilice la API para exportar traducciones e importar contenido de\u002Fa Localazy mediante programación.",{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},"Choose between translating strings directly or uploading them into Localazy.",{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},"Pomocí rozhraní API můžete programovaně exportovat překlady a importovat obsah z\u002Fdo Localazy.",{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":971},"Create source keys online","add-keys-manually","Add source keys via the web interface online and sync them into your project later.","\u002Fdocs\u002Fgeneral\u002Fimporting-localization-files#add-new-keys-in-ui","vpn-key-outline",[972,973,976,977,980,983,984,985],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},"Cree claves fuente en línea","Añada claves fuente a través de la interfaz web en línea y sincronícelas posteriormente en su proyecto.",{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},"Vytvářejte zdrojové klíče online","Přidejte zdrojové klíče přes webové rozhraní online a synchronizujte je do svého projektu později.",{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},"Cree claves de origen en línea","Añada claves de origen a través de la interfaz web en línea y sincronícelas posteriormente en su proyecto.",{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},88,"de","Erstellen Sie Quellschlüssel online","Fügen Sie Quellschlüssel über die Weboberfläche online hinzu und synchronisieren Sie sie später mit Ihrem Projekt.",{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":997},"Direct file upload","File upload","web-upload","Upload your texts and existing translations in any format directly to start quickly.","\u002Fdocs\u002Fgeneral\u002Fimporting-localization-files","file-upload",[998,999,1002,1003,1007],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},"Carga directa de archivos","Cargue sus textos y traducciones existentes en cualquier formato directamente para empezar rápidamente.",{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},56,"Přímé nahrávání souborů","Nahrajte přímo své texty a stávající překlady v libovolném formátu a začněte pracovat ihned.",{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},85,"Direkter Datei-Upload","Laden Sie Ihre Texte und vorhandenen Übersetzungen in einem beliebigen Format direkt hoch, um schnell loszulegen.",{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1015},"Command Line Interface","The best option for developers that want to make localization an automated part of their workflow.","\u002Fdocs\u002Fcli\u002Fthe-basics",[1016,1017,1020,1021,1024],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},"Interfaz de Línea de Comandos","La mejor opción para los desarrolladores que deseen hacer de la localización una parte automatizada de su flujo de trabajo.",{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},"Rozhraní Příkazového Řádku","Nejlepší volba pro vývojáře, kteří chtějí, aby se lokalizace stala automatizovanou součástí jejich pracovních postupů.",{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},87,"Befehlszeilenschnittstelle","Die beste Option für Entwickler, die die Lokalisierung zu einem automatisierten Teil ihres Arbeitsablaufs machen möchten.",[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1030},[1031,1032,1033,1034,1035],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1037],{"id":1038,"status":5,"created_on":1039,"sort":10,"slug":1040,"label":1041,"on_faq_index":10},76,"2025-02-26T12:44:29.000Z","front-end-common","Front-end Common",[1043],{"languages_code":925,"name":607,"slug":606,"description":907,"support_type":909,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"id":535,"platforms_id":535,"docs_link":908},{"id":103,"status":5,"created_on":905,"modified_on":1045,"name":614,"slug":613,"description":1046,"docs_link":908,"priority":10,"has_sdk":160,"sort":33,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":909,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"is_enterprise":160,"is_popular":160,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":1049,"upload_features":1050,"icon":1051,"meta_image":1052,"primary_tag":1054,"tags":1061,"integration_methods":1075,"recommended_methods":1106,"default_integration_method":1107,"faq_categories":1114,"translations":1120,"platforms_id":103},"2025-02-26T13:35:41.000Z","Online Vue.js project localization tool for your translation management. Enjoy true continuous localization with Localazy & translate your JSON files automatically.","Vue.js & JSON","Enjoy true continuous localization with Localazy & translate your Vue projects automatically.",{"json":647},[],{"id":616},{"id":1053},"8171b836-d6b8-4354-8db3-34ccd384970d",{"id":37,"status":5,"sort":20,"created_on":919,"label":920,"hidden":160,"icon":1055,"translations":1056},{"id":922},[1057,1058,1059,1060],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},[1062,1069],{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":1063,"translations":1064},{"id":922},[1065,1066,1067,1068],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":53,"status":5,"sort":57,"label":943,"hidden":160,"created_on":944,"icon":10,"translations":1070},[1071,1072,1073,1074],{"id":53,"languages_code":925,"label":943},{"id":500,"languages_code":927,"label":948},{"id":451,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},[1076,1082,1092,1099],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1077},[1078,1079,1080,1081],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1083},[1084,1085,1086,1087,1088,1089,1090,1091],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1093},[1094,1095,1096,1097,1098],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1100},[1101,1102,1103,1104,1105],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1108},[1109,1110,1111,1112,1113],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1115,1119],{"id":1004,"status":5,"created_on":1116,"sort":10,"slug":1117,"label":1118,"on_faq_index":10},"2023-03-01T11:21:41.000Z","vue-localization","Vue.js Localization",{"id":1038,"status":5,"created_on":1039,"sort":10,"slug":1040,"label":1041,"on_faq_index":10},[1121],{"languages_code":925,"name":614,"slug":613,"description":1046,"support_type":909,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"id":103,"platforms_id":103,"docs_link":908},{"id":4,"status":5,"created_on":905,"modified_on":1123,"name":627,"slug":626,"description":1124,"docs_link":1125,"priority":10,"has_sdk":160,"sort":41,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1126,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":160,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"is_enterprise":160,"is_popular":160,"primary_use_case":1128,"hierarchy_handling":1129,"best_for":1130,"file_extension":1131,"format_code_example":1132,"format_to_extension":1133,"upload_features":1135,"icon":1136,"meta_image":1137,"primary_tag":1139,"tags":1150,"integration_methods":1186,"recommended_methods":1217,"default_integration_method":1218,"faq_categories":1225,"translations":1226,"platforms_id":4},"2025-07-03T14:21:42.000Z","Learn how to use Localazy CLI for localization of Flutter app. Flutter’s ARB format is fully supported including arrays, plurals, and selected context information. No extra configuration is necessary, but you can enable certain features if you want to.","\u002Fdocs\u002Fcli\u002Fflutter-format","ARB format support","Use the Localazy CLI for localization of Flutter projects. Flutter’s ARB format is fully supported.","Supports metadata like placeholders","JSON-like key-value","Flutter apps",".arb","```\n{\n  \"localazy_message\": \"Go international, today. With Localazy.\"\n}\n```",{"arb":1134},"arb",[],{"id":629},{"id":1138},"c2674666-4371-4aa4-9a65-438c7363fafe",{"id":41,"status":5,"sort":53,"created_on":944,"label":1140,"hidden":160,"icon":1141,"translations":1143},"Mobile apps",{"id":1142},"c9c7e1f5-8b59-4016-ae0c-6fba9469cd55",[1144,1145,1147,1149],{"id":41,"languages_code":925,"label":1140},{"id":374,"languages_code":927,"label":1146},"Aplicaciones móviles",{"id":443,"languages_code":930,"label":1148},"Mobilní aplikace",{"id":411,"languages_code":933,"label":1140},[1151,1162,1169,1176],{"id":45,"status":5,"sort":103,"label":1152,"hidden":160,"created_on":944,"icon":1153,"translations":1155},"Desktop & Games",{"id":1154},"65b04533-5b4c-430c-b8a4-ecce84754200",[1156,1157,1159,1161],{"id":45,"languages_code":925,"label":1152},{"id":382,"languages_code":927,"label":1158},"Escritorio y Juegos",{"id":1004,"languages_code":930,"label":1160},"Stolní počítače & Hry",{"id":684,"languages_code":933,"label":1152},{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":1163,"translations":1164},{"id":922},[1165,1166,1167,1168],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":41,"status":5,"sort":53,"label":1140,"hidden":160,"created_on":944,"icon":1170,"translations":1171},{"id":1142},[1172,1173,1174,1175],{"id":41,"languages_code":925,"label":1140},{"id":374,"languages_code":927,"label":1146},{"id":443,"languages_code":930,"label":1148},{"id":411,"languages_code":933,"label":1140},{"id":223,"status":5,"sort":407,"label":1177,"hidden":162,"created_on":944,"icon":10,"translations":1178},"ARB",[1179,1180,1182,1184],{"id":223,"languages_code":925,"label":1177},{"id":1181,"languages_code":927,"label":1177},120,{"id":1183,"languages_code":930,"label":1177},125,{"id":1185,"languages_code":933,"label":1177},130,[1187,1193,1203,1210],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1188},[1189,1190,1191,1192],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1194},[1195,1196,1197,1198,1199,1200,1201,1202],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1204},[1205,1206,1207,1208,1209],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1211},[1212,1213,1214,1215,1216],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1219},[1220,1221,1222,1223,1224],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],[1227],{"languages_code":925,"name":627,"slug":626,"description":1124,"support_type":1126,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"id":4,"platforms_id":4,"docs_link":1125},{"id":570,"status":5,"created_on":1229,"modified_on":1230,"name":641,"slug":640,"description":1231,"docs_link":1232,"priority":10,"has_sdk":160,"sort":19,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1233,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"is_enterprise":160,"is_popular":160,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":1235,"upload_features":1237,"icon":1238,"meta_image":1239,"primary_tag":1241,"tags":1254,"integration_methods":1269,"recommended_methods":1300,"default_integration_method":1301,"faq_categories":1308,"translations":1312,"platforms_id":570},"2022-03-18T08:09:25.000Z","2024-07-17T07:43:22.000Z","Localize your app with JavaScript localizations and Localazy CLI.\nUpload JavaScript files with strings to Localazy and manage your translations easily. Download translated files back.","\u002Fdocs\u002Fcli\u002Fjavascript-format","JS file support","Translating JS files is easy as a pie with Localazy!",{"js":1236},"js",[],{"id":643},{"id":1240},"2c6699eb-1d80-4772-8268-5597dbcead8c",{"id":61,"status":5,"sort":61,"created_on":944,"label":1242,"hidden":160,"icon":1243,"translations":1245},"Programming Languages",{"id":1244},"8c5836bb-1fbe-49c5-9330-8f931838c457",[1246,1247,1249,1252],{"id":61,"languages_code":925,"label":1242},{"id":468,"languages_code":927,"label":1248},"Lenguajes de Programación",{"id":1250,"languages_code":930,"label":1251},68,"Programovací Jazyky",{"id":1253,"languages_code":933,"label":1242},70,[1255,1262],{"id":37,"status":5,"sort":20,"label":920,"hidden":160,"created_on":919,"icon":1256,"translations":1257},{"id":922},[1258,1259,1260,1261],{"id":37,"languages_code":925,"label":920},{"id":365,"languages_code":927,"label":928},{"id":782,"languages_code":930,"label":931},{"id":565,"languages_code":933,"label":920},{"id":61,"status":5,"sort":61,"label":1242,"hidden":160,"created_on":944,"icon":1263,"translations":1264},{"id":1244},[1265,1266,1267,1268],{"id":61,"languages_code":925,"label":1242},{"id":468,"languages_code":927,"label":1248},{"id":1250,"languages_code":930,"label":1251},{"id":1253,"languages_code":933,"label":1242},[1270,1276,1286,1293],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1271},[1272,1273,1274,1275],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1277},[1278,1279,1280,1281,1282,1283,1284,1285],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1287},[1288,1289,1290,1291,1292],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1294},[1295,1296,1297,1298,1299],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1302},[1303,1304,1305,1306,1307],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1309],{"id":464,"status":5,"created_on":1310,"sort":10,"slug":1311,"label":641,"on_faq_index":160},"2022-06-10T09:49:33.000Z","javascript-i18n-localization",[1313],{"languages_code":925,"name":641,"slug":640,"description":1231,"support_type":1233,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"id":570,"platforms_id":570,"docs_link":1232},{"id":19,"status":5,"created_on":1229,"modified_on":1315,"name":648,"slug":647,"description":1316,"docs_link":908,"priority":10,"has_sdk":160,"sort":107,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1317,"show_in_spa":162,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"is_enterprise":160,"is_popular":162,"primary_use_case":1320,"hierarchy_handling":1321,"best_for":1322,"file_extension":1323,"format_code_example":1324,"format_to_extension":1325,"upload_features":1326,"icon":1327,"meta_image":1328,"primary_tag":1330,"tags":1341,"integration_methods":1349,"recommended_methods":1380,"default_integration_method":1381,"faq_categories":1388,"translations":1391,"platforms_id":19},"2025-10-14T11:22:29.000Z","Online JSON translator you will love. Comfortable JSON language files editor with powerful CLI under your fingers for continuous localization.","Advanced format support","{Objectively the best}","Translate any JSON files with Localazy, with the best in class plural and array support.","Used for structured data storage and APIs","Uses key-value pairs","Web & mobile apps, APIs",".json","```\n{\n  \"parent\": {\n    \"child\": {\n      \"another_nested_level\": \"All is supported.\"\n    }\n  }\n}\n```",{"json":647},[],{"id":650},{"id":1329},"8d614c20-667e-4bee-a64d-7d7ce9c0ee0a",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1332,"translations":1334},"File formats",{"id":1333},"ab7c8f89-dcce-45ab-9e21-8605aef289c3",[1335,1336,1338,1340],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},"Formatos de archivo",{"id":484,"languages_code":930,"label":1339},"Formáty souborů",{"id":574,"languages_code":933,"label":1331},[1342],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1343,"translations":1344},{"id":1333},[1345,1346,1347,1348],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1350,1356,1366,1373],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1351},[1352,1353,1354,1355],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1357},[1358,1359,1360,1361,1362,1363,1364,1365],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1367},[1368,1369,1370,1371,1372],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1374},[1375,1376,1377,1378,1379],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1382},[1383,1384,1385,1386,1387],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1389],{"id":423,"status":5,"created_on":1390,"sort":10,"slug":647,"label":648,"on_faq_index":160},"2022-06-10T10:49:07.000Z",[1392],{"languages_code":925,"name":648,"slug":647,"description":1316,"support_type":1317,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"id":19,"platforms_id":19,"docs_link":908},{"id":24,"status":5,"created_on":1229,"modified_on":1394,"name":655,"slug":654,"description":1395,"docs_link":1396,"priority":10,"has_sdk":160,"sort":24,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1397,"show_in_spa":160,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"is_enterprise":160,"is_popular":162,"primary_use_case":1400,"hierarchy_handling":1401,"best_for":1402,"file_extension":1403,"format_code_example":1404,"format_to_extension":1405,"upload_features":1407,"icon":1408,"meta_image":1409,"primary_tag":1411,"tags":1418,"integration_methods":1440,"recommended_methods":1471,"default_integration_method":1472,"faq_categories":1479,"translations":1480,"platforms_id":24},"2025-07-03T14:28:31.000Z","XLIFF is meant for localization. Enjoy Localazy - an online XLIFF editor for your translation management. Integrate your XLIFF files with Localazy to achieve true continuous localization and translate XLIFF files on autopilot.","\u002Fdocs\u002Fcli\u002Fxliff-12-format","File format support","Meant for localization","XLIFF stands for XML Localization Interchange File Format - and Localazy is the best way to manage XLIFF files.","Used in translation pipelines","XML-based exchange format","Translation & software",".xliff","```\n\u003Ctrans-unit id=\"localazy_message\">\n    \u003Csource>Go international, today. With Localazy.\u003C\u002Fsource>\n\u003C\u002Ftrans-unit>\n```",{"xliff":1406},"xlf",[],{"id":657},{"id":1410},"889970a6-cce8-4055-b96a-9c3f292aa67f",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1412,"translations":1413},{"id":1333},[1414,1415,1416,1417],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1419,1426,1433],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1420,"translations":1421},{"id":1333},[1422,1423,1424,1425],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1427,"translations":1428},{"id":1333},[1429,1430,1431,1432],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1434,"translations":1435},{"id":1333},[1436,1437,1438,1439],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1441,1447,1457,1464],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1442},[1443,1444,1445,1446],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1448},[1449,1450,1451,1452,1453,1454,1455,1456],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1458},[1459,1460,1461,1462,1463],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1465},[1466,1467,1468,1469,1470],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1473},[1474,1475,1476,1477,1478],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],[1481],{"languages_code":925,"name":655,"slug":654,"description":1395,"support_type":1397,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"id":24,"platforms_id":24,"docs_link":1396},{"id":107,"status":5,"created_on":1483,"modified_on":1483,"name":1484,"slug":1485,"description":1486,"docs_link":1487,"priority":10,"has_sdk":160,"sort":247,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1397,"show_in_spa":162,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":160,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"is_enterprise":160,"is_popular":162,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":1490,"upload_features":1491,"icon":1492,"meta_image":1494,"primary_tag":1496,"tags":1503,"integration_methods":1531,"recommended_methods":1562,"default_integration_method":1563,"faq_categories":1570,"translations":1571,"platforms_id":107},"2026-05-21T20:49:09.000Z","PO","po","Edit .po and .pot files with your team, automate translation with AI, and ship faster.","\u002Fdocs\u002Fcli\u002Fpo-format","Seamless integration","Upload, edit and translate PO files with Localazy.",{"po":1485},[],{"id":1493},"25f317fe-0c10-4f0b-92cd-f80d1f3c6a67",{"id":1495},"490022f9-d91a-4e1a-9e79-db374ec997c2",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1497,"translations":1498},{"id":1333},[1499,1500,1501,1502],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1504,1511,1521],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1505,"translations":1506},{"id":1333},[1507,1508,1509,1510],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":394,"status":5,"sort":394,"label":1512,"hidden":162,"created_on":944,"icon":10,"translations":1513},"C++",[1514,1515,1517,1519],{"id":394,"languages_code":925,"label":1512},{"id":1516,"languages_code":927,"label":1512},135,{"id":1518,"languages_code":930,"label":1512},140,{"id":1520,"languages_code":933,"label":1512},144,{"id":24,"status":5,"sort":247,"label":1522,"hidden":162,"created_on":944,"icon":10,"translations":1523},"Gettext",[1524,1525,1527,1529],{"id":24,"languages_code":925,"label":1522},{"id":1526,"languages_code":927,"label":1522},101,{"id":1528,"languages_code":930,"label":1522},106,{"id":1530,"languages_code":933,"label":1522},111,[1532,1538,1548,1555],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1533},[1534,1535,1536,1537],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1539},[1540,1541,1542,1543,1544,1545,1546,1547],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1549},[1550,1551,1552,1553,1554],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1556},[1557,1558,1559,1560,1561],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1564},[1565,1566,1567,1568,1569],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],[1572],{"languages_code":925,"name":1484,"slug":1485,"description":1486,"support_type":1397,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"id":107,"platforms_id":107,"docs_link":1487},{"id":252,"status":5,"created_on":1229,"modified_on":1574,"name":1575,"slug":1576,"description":1577,"docs_link":1578,"priority":10,"has_sdk":160,"sort":230,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1397,"show_in_spa":162,"is_file_format":162,"meta_title":10,"meta_description":10,"featured_on_web":160,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"is_enterprise":160,"is_popular":160,"primary_use_case":1581,"hierarchy_handling":1582,"best_for":1583,"file_extension":1584,"format_code_example":1585,"format_to_extension":1586,"upload_features":1587,"icon":1588,"meta_image":1589,"primary_tag":1591,"tags":1598,"integration_methods":1616,"recommended_methods":1647,"default_integration_method":1648,"faq_categories":1655,"translations":1658,"platforms_id":252},"2025-10-02T08:32:44.000Z","RESX","resx","Quickly translate and manage your RESX files with Localazy or integrate Localazy with your .NET project and enjoy a fully automated localization process. ","\u002Fdocs\u002Fcli\u002Fresx-format",".NET localization","Translate .NET projects using RESX files and Localazy.","Standard format for Windows\u002F.NET localization","Flat key-value structure",".NET applications",".resx","```\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Croot>\n  \u003Cdata name=\"localazy_message\" xml:space=\"preserve\">\n    \u003Cvalue>Go international, today. With Localazy.\u003C\u002Fvalue>\n  \u003C\u002Fdata>\n\u003C\u002Froot>\n```",{"resx":1576},[],{"id":1493},{"id":1590},"1f07bf83-9363-47d6-b21b-a5121c0efaf6",{"id":33,"status":5,"sort":37,"created_on":944,"label":1331,"hidden":160,"icon":1592,"translations":1593},{"id":1333},[1594,1595,1596,1597],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},[1599,1606],{"id":33,"status":5,"sort":37,"label":1331,"hidden":160,"created_on":944,"icon":1600,"translations":1601},{"id":1333},[1602,1603,1604,1605],{"id":33,"languages_code":925,"label":1331},{"id":356,"languages_code":927,"label":1337},{"id":484,"languages_code":930,"label":1339},{"id":574,"languages_code":933,"label":1331},{"id":247,"status":5,"sort":252,"label":1607,"hidden":162,"created_on":944,"icon":10,"translations":1608},"C#",[1609,1610,1612,1614],{"id":247,"languages_code":925,"label":1607},{"id":1611,"languages_code":927,"label":1607},103,{"id":1613,"languages_code":930,"label":1607},108,{"id":1615,"languages_code":933,"label":1607},113,[1617,1623,1633,1640],{"id":33,"status":5,"sort":41,"label":771,"alternative_label":10,"slug":775,"description":954,"documentation_link":955,"loc_icon":775,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1618},[1619,1620,1621,1622],{"id":33,"languages_code":925,"label":771,"description":954,"slug":775},{"id":959,"languages_code":927,"label":771,"description":960,"slug":775},{"id":782,"languages_code":933,"label":771,"description":962,"slug":775},{"id":565,"languages_code":930,"label":771,"description":964,"slug":775},{"id":25,"status":5,"sort":37,"label":966,"alternative_label":10,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1624},[1625,1626,1627,1628,1629,1630,1631,1632],{"id":25,"languages_code":925,"label":966,"description":968,"slug":967},{"id":291,"languages_code":927,"label":974,"description":975,"slug":10},{"id":484,"languages_code":933,"label":966,"description":968,"slug":967},{"id":451,"languages_code":930,"label":978,"description":979,"slug":10},{"id":402,"languages_code":927,"label":981,"description":982,"slug":967},{"id":411,"languages_code":933,"label":966,"description":968,"slug":967},{"id":684,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":10},{"id":20,"status":5,"sort":33,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1634},[1635,1636,1637,1638,1639],{"id":20,"languages_code":925,"label":991,"description":994,"slug":993},{"id":218,"languages_code":927,"label":1000,"description":1001,"slug":10},{"id":382,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":10},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":10},{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1641},[1642,1643,1644,1645,1646],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[],{"id":4,"status":5,"sort":25,"label":1012,"alternative_label":759,"slug":540,"description":1013,"documentation_link":1014,"loc_icon":540,"is_official_plugin":160,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1649},[1650,1651,1652,1653,1654],{"id":4,"languages_code":925,"label":1012,"description":1013,"slug":540},{"id":207,"languages_code":927,"label":1018,"description":1019,"slug":540},{"id":374,"languages_code":933,"label":1012,"description":1013,"slug":540},{"id":443,"languages_code":930,"label":1022,"description":1023,"slug":540},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":10},[1656],{"id":356,"status":5,"created_on":1657,"sort":10,"slug":1576,"label":1575,"on_faq_index":10},"2022-08-01T16:44:06.000Z",[1659],{"languages_code":925,"name":1575,"slug":1576,"description":1577,"support_type":1397,"meta_title":10,"meta_description":10,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"id":252,"platforms_id":252,"docs_link":1578},{"id":661,"status":5,"created_on":1661,"modified_on":1662,"name":664,"slug":663,"description":1663,"docs_link":1664,"priority":10,"has_sdk":10,"sort":662,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1665,"show_in_spa":162,"is_file_format":10,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"is_enterprise":160,"is_popular":162,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":10,"upload_features":10,"icon":1667,"meta_image":1668,"primary_tag":1670,"tags":1682,"integration_methods":1726,"recommended_methods":1746,"default_integration_method":1747,"faq_categories":1754,"translations":1757,"platforms_id":661},"2022-06-16T09:08:11.000Z","2026-04-27T18:16:54.000Z","Enjoy seamless integration of Strapi & Localazy and translate your website efficiently. Download the official Localazy plugin in the Strapi Marketplace to get started!","\u002Fdocs\u002Fstrapi\u002Fstrapi-plugin-introduction","Localization Plugin","Localize your Strapi website with our official localization plugin. Easy setup and installation.",{"id":666},{"id":1669},"5995b721-a2ea-487e-ad4b-298a489bbd24",{"id":19,"status":5,"sort":15,"created_on":944,"label":1671,"hidden":160,"icon":1672,"translations":1674},"CMS",{"id":1673},"1172a655-928c-4594-9263-d8afdfd9cd79",[1675,1676,1678,1680],{"id":19,"languages_code":925,"label":1671},{"id":1677,"languages_code":927,"label":1671},73,{"id":1679,"languages_code":930,"label":1671},81,{"id":1681,"languages_code":933,"label":1671},84,[1683,1695,1707,1714],{"id":99,"status":5,"sort":95,"label":1684,"hidden":160,"created_on":944,"icon":10,"translations":1685},"Multilingual SEO",[1686,1687,1690,1693],{"id":99,"languages_code":925,"label":1684},{"id":1688,"languages_code":927,"label":1689},89,"SEO multilingüe",{"id":1691,"languages_code":930,"label":1692},94,"Vícejazyčné SEO",{"id":1694,"languages_code":933,"label":1684},99,{"id":535,"status":5,"sort":535,"label":302,"hidden":160,"created_on":944,"icon":1696,"translations":1698},{"id":1697},"e782ed3f-d954-45ca-8b17-5bf5fe95f30a",[1699,1700,1703,1705],{"id":535,"languages_code":925,"label":302},{"id":1701,"languages_code":927,"label":1702},132,"Comercio electrónico",{"id":1704,"languages_code":930,"label":302},137,{"id":1706,"languages_code":933,"label":302},142,{"id":19,"status":5,"sort":15,"label":1671,"hidden":160,"created_on":944,"icon":1708,"translations":1709},{"id":1673},[1710,1711,1712,1713],{"id":19,"languages_code":925,"label":1671},{"id":1677,"languages_code":927,"label":1671},{"id":1679,"languages_code":930,"label":1671},{"id":1681,"languages_code":933,"label":1671},{"id":20,"status":5,"sort":41,"label":1715,"hidden":160,"created_on":944,"icon":1716,"translations":1718},"Marketing tools",{"id":1717},"098fe6a4-dd2e-42d8-937e-2d8121e6e266",[1719,1720,1723,1725],{"id":20,"languages_code":925,"label":1715},{"id":1721,"languages_code":927,"label":1722},43,"Herramientas de marketing",{"id":431,"languages_code":930,"label":1724},"Marketingové nástroje",{"id":509,"languages_code":933,"label":1715},[1727],{"id":53,"status":5,"sort":10,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1734},"Official Strapi Plugin","Official Plugin","official-strapi-plugin","Our developers maintain an official Strapi localization plugin. Start in a few clicks!","\u002Fdocs\u002Fstrapi","localazy-box",[1735,1736,1739,1740,1743],{"id":53,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":10},"Complemento Oficial de Strapi","Nuestros desarrolladores mantienen un complemento oficial de localización de Strapi. ¡Empiece en unos pocos clics!",{"id":500,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":574,"languages_code":930,"label":1741,"description":1742,"slug":10},"Oficiál Plugin Strapi","Naši vývojáři udržují a neustále vylepšují oficiální lokalizační plugin Strapi. Začněte několika kliknutími!",{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":10},"Offizielles Strapi-Plugin","Unsere Entwickler pflegen ein offizielles Strapi-Lokalisierungs-Plugin. Starten Sie mit ein paar Klicks!",[],{"id":53,"status":5,"sort":10,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1748},[1749,1750,1751,1752,1753],{"id":53,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":10},{"id":500,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":574,"languages_code":930,"label":1741,"description":1742,"slug":10},{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":10},[1755],{"id":207,"status":5,"created_on":1756,"sort":10,"slug":663,"label":664,"on_faq_index":10},"2022-06-16T09:24:13.000Z",[1758],{"languages_code":925,"name":664,"slug":663,"description":1663,"support_type":1665,"meta_title":10,"meta_description":10,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"id":661,"platforms_id":661,"docs_link":1664},{"id":451,"status":5,"created_on":1229,"modified_on":1760,"name":671,"slug":670,"description":10,"docs_link":1761,"priority":10,"has_sdk":160,"sort":443,"highlighted":160,"in_menu":162,"changefreq":10,"support_type":1762,"show_in_spa":162,"is_file_format":160,"meta_title":10,"meta_description":10,"featured_on_web":162,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"is_enterprise":160,"is_popular":162,"primary_use_case":10,"hierarchy_handling":10,"best_for":10,"file_extension":10,"format_code_example":10,"format_to_extension":10,"upload_features":1766,"icon":1767,"meta_image":1768,"primary_tag":1770,"tags":1783,"integration_methods":1791,"recommended_methods":1804,"default_integration_method":1805,"faq_categories":1811,"translations":1812,"platforms_id":451},"2024-12-20T15:00:22.000Z","\u002Fdocs\u002Fintegrations\u002Fquick-start-figma","plugin","Figma plugin","Localization plugin","Quickly translate your Figma designs and seamlessly reuse the translations during the development of your project.",[],{"id":673},{"id":1769},"7573fed6-8817-4cb4-84d2-be327e6c4891",{"id":25,"status":5,"sort":45,"created_on":944,"label":1771,"hidden":160,"icon":1772,"translations":1774},"Design tools",{"id":1773},"1053d863-b690-4fbd-aadf-dbf2ba282768",[1775,1776,1779,1782],{"id":25,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},42,"Herramientas de diseño",{"id":1780,"languages_code":930,"label":1781},49,"Nástroje pro návrh",{"id":557,"languages_code":933,"label":1771},[1784],{"id":25,"status":5,"sort":45,"label":1771,"hidden":160,"created_on":944,"icon":1785,"translations":1786},{"id":1773},[1787,1788,1789,1790],{"id":25,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},{"id":1780,"languages_code":930,"label":1781},{"id":557,"languages_code":933,"label":1771},[1792],{"id":45,"status":5,"sort":10,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":85,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1795},"official-plugin","Our developers maintain an official plugin for this integration. Start in a few clicks!",[1796,1797,1800,1801],{"id":45,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":280,"languages_code":927,"label":1798,"description":1799,"slug":10},"Plugin Oficial","Nuestros desarrolladores mantienen un plugin oficial para esta integración. ¡Empiece con unos pocos clics!",{"id":271,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":464,"languages_code":930,"label":1802,"description":1803,"slug":10},"Oficiální Plugin","Naši vývojáři udržují a neustále vylepšují oficiální plugin pro tuto integraci. Začněte několika kliknutími!",[],{"id":45,"status":5,"sort":10,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":85,"loc_icon":1733,"is_official_plugin":162,"is_universal_plugin":160,"universal_plugin_vendor":10,"translations":1806},[1807,1808,1809,1810],{"id":45,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":280,"languages_code":927,"label":1798,"description":1799,"slug":10},{"id":271,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":464,"languages_code":930,"label":1802,"description":1803,"slug":10},[],[1813],{"languages_code":925,"name":671,"slug":670,"description":10,"support_type":1762,"meta_title":10,"meta_description":10,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"id":451,"platforms_id":451,"docs_link":1761},{"id":1815,"owner":1816,"created_by":10,"sort":10,"title":1821,"slug":1822,"modified_on":877,"created_on":1823,"pinned":160,"badge":10,"priority":1824,"main_image":1825,"status":5,"tags":1826,"dictionary":1837,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"6a145e3f8550a300014081e4",{"id":1817,"first_name":1818,"last_name":877,"slug":1819,"avatar":1820},"65647a510470910001942876","Dorota Pawlak","dorota-pawlak","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F07\u002Fdorota.png","The great LLM translation war, pt. 2: Context beats model choice in 2026","the-great-llm-translation-war-pt-2-2026","2026-06-05T14:56:58.000+02:00","0.7","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F06\u002Flocalazy-AI-series-11.png",[1827,1831,1834],{"id":402,"created_on":1828,"status":5,"label":1829,"slug":1830,"on_index_page":162},"2026-06-08 01:18:11","AI","ai",{"id":402,"created_on":1828,"status":5,"label":1832,"slug":1833,"on_index_page":160},"ChatGPT","chatgpt",{"id":451,"created_on":1828,"status":5,"label":1835,"slug":1836,"on_index_page":160},"Translations","translations",[],0,{"id":1840,"owner":1841,"created_by":10,"sort":10,"title":1846,"slug":1847,"modified_on":877,"created_on":1848,"pinned":160,"badge":10,"priority":1824,"main_image":1849,"status":5,"tags":1850,"dictionary":1855,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},"69d78a237ab1270001eddabf",{"id":1842,"first_name":1843,"last_name":877,"slug":1844,"avatar":1845},"606c233dcf7b6a0001d1da93","Petr Hodný","petr-hodny","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fpetr.png","Translation API: Translate your content on the fly with Localazy AI!","translation-api-translate-your-content-on-the-fly-with-localazy-ai","2026-04-24T09:27:26.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F04\u002FLocalazy-AI-translation-api.png",[1851,1852,1853],{"id":451,"created_on":1828,"status":5,"label":771,"slug":775,"on_index_page":160},{"id":402,"created_on":1828,"status":5,"label":1829,"slug":1830,"on_index_page":162},{"id":451,"created_on":1828,"status":5,"label":352,"slug":1854,"on_index_page":162},"localization",[],{"partnership":1857,"posts":1947,"faqs":2298},{"id":107,"status":5,"date_created":1858,"date_updated":1859,"name":1860,"slug":1861,"headline_claim":1862,"headline_description":1863,"partner_overview":1864,"partner_type":1865,"contact_description":1867,"partner_quote":1868,"partner_brand":1875,"faq_subcategory":1886,"partner_social_proof":10,"partner_logo_collection":10,"related_tags":1888,"blog_articles":1901,"integrations":1918},"2025-09-10T09:44:10.000Z","2025-09-16T15:03:57.000Z","Delta-N","delta-n","Achieve digital progress","From our office in the Netherlands, we support clients across industries with smart, scalable and future-proof IT solutions.","## What we are\n\nDelta-N is a Dutch IT company dedicated to helping businesses achieve digital progress. We combine a deep technical expertise with a pragmatic mindset to deliver fast and sustainable results. Our teams work closely with clients to build solutions that truly fit their needs. We believe in technology that works, and in people who make it work. \n\n## What we do\n\nWe develop software that enables organizations to work more efficiently, intelligently and flexibly. We modernize legacy systems and build new applications that are ready for tomorrow’s challenges. Our approach is iterative and value-driven, with every step focused on delivering real impact. We listen, think critically and are not afraid to challenge the status quo. We believe technology only adds value when it aligns with the client’s ambitions.\n\nWe primarily work for customers with 50 to 250 employees: scale-ups and medium-sized businesses that are ready to take their software to an enterprise-ready level. As these organizations grow, their technology must grow with them. Our role is to ensure their software does not lag behind the business, but instead supports and accelerates future ambitions.\n\n## Our services\n\nOur core expertise lies in three areas:\n\n### Software development\n\nWe build robust and scalable applications tailored to each client’s goals using modern frameworks like Angular and Microsoft technologies. Angular in particular allows us to deliver enterprise-level solutions where internationalization is essential. This is why we work with Localazy as our partner for localization, ensuring multilingual content can be managed efficiently and reliably.\n\n### DevOps\n\nThrough our DevOps practices we ensure fast, secure and reliable software delivery, complete with CI\u002FCD pipelines, monitoring and cloud integration. \n\n### AI implementation\n\nWe help organizations turn data into actionable insights and intelligent solutions, from predictive models to automation. We start small and focused, but always with the flexibility to grow. Every project is delivered in close collaboration with a sharp eye for quality and long-term impact.\n\n## Our guarantee\n\nSecurity and compliance are central to everything we do. Delta-N is ISO 27001 certified, just like Localazy, which means we meet internationally recognized standards for information security. This gives our clients the confidence that their systems and data are handled with the highest level of care.",[1866],"b2b","Sales: Pascal Kruijmel\nTechnical: Gio Wolpert",{"id":91,"status":5,"date_created":1869,"date_updated":1870,"quote":1871,"author_name":1872,"author_role":187,"profile_picture":1873},"2025-09-10T09:45:48.000Z","2025-09-16T15:05:07.000Z","\"With Localazy, we offer our clients a smart, consistent and user-friendly way to independently manage their multilingual content ensuring its quality.\"","Roderick Schoon",{"id":1874},"6cfaa744-61d8-4c5a-993d-f75af4c89b23",{"id":1688,"status":5,"featured":160,"name":1860,"link":1876,"country":1877,"region":1878,"email":1879,"competencies":1880,"facebook":10,"twitter":1882,"linkedin":1883,"github":10,"image":1884},"https:\u002F\u002Fwww.delta-n.nl\u002F","Netherlands","Europe","sales@delta-n.nl",[1881],"Software Development","https:\u002F\u002Fx.com\u002FDeltaNBV","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fdelta-n\u002F",{"id":1885},"db21287a-8f9b-4187-b520-44408814e347",{"id":107,"status":5,"sort":10,"date_created":1887,"slug":1861,"label":1860},"2025-09-10T09:59:01.000Z",[1889,1892,1895,1899],{"id":1890,"status":5,"created_on":1891,"label":621,"slug":620,"on_index_page":162},90,"2026-05-02T21:02:49.000Z",{"id":1893,"status":5,"created_on":1894,"label":352,"slug":1854,"on_index_page":162},41,"2022-03-17T12:22:59.000Z",{"id":1896,"status":5,"created_on":1891,"label":1897,"slug":1898,"on_index_page":162},93,"Continuous Localization","continuous-localization",{"id":661,"status":5,"created_on":1900,"label":1897,"slug":1898,"on_index_page":162},"2023-05-25T12:43:48.000Z",[1902,1911],{"id":1903,"status":5,"sort":10,"date_created":1904,"date_updated":1905,"title":1906,"slug":1907,"feature_image":1908,"meta_title":1909,"meta_description":1910,"reading_time":15},935,"2021-04-05T16:39:08.000Z","2026-05-03T22:18:26.000Z","How to localize an Angular app with angular-i18n and Localazy","localize-angular-app-i18n-l10n-localazy","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002Ftechnical-article.png","How to localize Angular apps with ease","Tutorial on how to add i18n support and localize Angular apps using Localazy and angular-i18n.",{"id":1912,"status":5,"sort":10,"date_created":1913,"date_updated":1914,"title":1915,"slug":1916,"feature_image":1917,"meta_title":877,"meta_description":877,"reading_time":53},919,"2021-05-11T08:23:11.000Z","2026-05-03T22:36:31.000Z","Guide: How to prepare your application for i18n & l10n","guide-preparing-application-for-i18n-l10n-localazy","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F05\u002FPrepare-app-for-i18n.png",[1919,1925,1927,1929,1939],{"id":91,"status":5,"name":621,"slug":620,"description":1920,"docs_link":1396,"support_type":1921,"tile_subtitle":1922,"tile_description":1923,"meta_title":10,"meta_description":10,"icon":1924},"Online Angular project localization tool for your translation management. Enjoy true continuous localization with Localazy & translate your XLIFF files automatically.","XLIFF format support","angular-i18n & XLIFF support","Localazy will translate the XLIFF files of your Angular project with ease.",{"id":623},{"id":252,"status":5,"name":1575,"slug":1576,"description":1577,"docs_link":1578,"support_type":1397,"tile_subtitle":1579,"tile_description":1580,"meta_title":10,"meta_description":10,"icon":1926},{"id":1493},{"id":24,"status":5,"name":655,"slug":654,"description":1395,"docs_link":1396,"support_type":1397,"tile_subtitle":1398,"tile_description":1399,"meta_title":10,"meta_description":10,"icon":1928},{"id":657},{"id":331,"status":5,"name":1930,"slug":1931,"description":1932,"docs_link":1933,"support_type":1934,"tile_subtitle":1935,"tile_description":1936,"meta_title":10,"meta_description":10,"icon":1937},"XLIFF 2.0","xliff-20","XLIFF 2.0 is the newest version of XLIFF file format. Integrate your XLIFF 2.0 files with Localazy to achieve true continuous localization and translate XLIFF 2.0 files on autopilot. ","\u002Fdocs\u002Fcli\u002Fxliff-20-format","v2.0 format support","Evolution of localization","It's two times better for you to translate & manage your XLIFF 2.0 files with Localazy.",{"id":1938},"0e97008d-8df5-4419-8e78-c01a882aa894",{"id":87,"status":5,"name":1940,"slug":1941,"description":1942,"docs_link":1396,"support_type":1943,"tile_subtitle":1944,"tile_description":1945,"meta_title":10,"meta_description":10,"icon":1946},"XLIFF 1.2","xliff-12","XLIFF is meant for localization. Integrate your XLIFF 1.2 files with Localazy to achieve true continuous localization and translate XLIFF 1.2 files on autopilot. ","v1.2 format support","XLIFF and XLF","Manage your XLIFF 1.2 files with Localazy. ",{"id":1938},[1948,2116,2291],{"id":1949,"owner":1950,"created_by":10,"sort":10,"title":1906,"slug":1907,"modified_on":1955,"created_on":1956,"pinned":160,"badge":10,"priority":1824,"main_image":1908,"status":5,"tags":1957,"dictionary":1965,"reading_time":61,"excerpt":2027,"og_title":877,"og_description":877,"og_image":877,"content":2028,"meta_title":1909,"meta_description":1910,"canonical":877,"cta":2029,"fullGhostPost":2037},"60a37fc7cf7b6a0001d1f1c6",{"id":1951,"first_name":1952,"last_name":877,"slug":1953,"avatar":1954},"61dc4e87df4bcb00010bd508","Mary Okosun","mary-okosun","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fokosun.png","2026-04-16T16:25:54.000+02:00","2025-10-29T18:39:00.000+01:00",[1958,1962,1963],{"id":451,"created_on":1959,"status":5,"label":1960,"slug":1961,"on_index_page":160},"2026-06-08 01:18:12","HowTo","howto",{"id":451,"created_on":1959,"status":5,"label":621,"slug":620,"on_index_page":160},{"id":451,"created_on":1959,"status":5,"label":1964,"slug":1964,"on_index_page":162},"i18n",[1966,1975,1990,2001,2021],{"id":1967,"status":5,"owner":1968,"created_on":1969,"title":621,"excerpt":1970,"content":1971,"slug":620,"meta_title":877,"meta_description":10,"canonical":10,"related_terms":1972},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)",[1973],{"id":1974,"slug":633},74,{"id":1976,"status":5,"owner":1968,"created_on":1977,"title":1978,"excerpt":1979,"content":1980,"slug":1981,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":1982},79,"2026-05-12T07:09:23.000Z","Internationalization (i18n)","The process of making your software localizable.","Internationalization (i18n) is the process of preparing software, digital products, and content so they can be easily adapted for various languages, regions, and cultures without requiring extensive reengineering.\n\nThis foundational step ensures that a product can be efficiently localized to meet the needs of different global markets. To internationalize your software, you need to pay attention to technical requirements. The code structure and design has to be prepared to allow for [localization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Flocalization).\n\nIt involves considering various linguistic and cultural factors during the initial design and development phases. This process should start, ideally, in the design phase. For example, you may want to have externalised strings so you can bring your strings to the translation management tool.\n\nEvery business looking to expand their reach and provide User Experiences (UX) across diverse markets needs to consider internationalization and then localization.\n\n## 🌐 Key points about internationalization (i18n): \n\n* Internationalization involves creating flexible and adaptable designs that accommodate various languages, scripts, and cultural norms.\n* By preparing content and software for localization, internationalization simplifies the process of translating and adapting products for specific markets.\n* This process includes using Unicode, supporting different character sets, and ensuring compatibility with various regional formats (dates, currencies, etc.).\n* Investing in internationalization upfront reduces the time and cost associated with localizing products for multiple markets.\n\nBy prioritizing internationalization, companies can create products that are more versatile and ready for global distribution, ensuring they meet the needs of international users effectively.","internationalization",[1983,1984,1986,1988],{"id":20,"slug":1854},{"id":33,"slug":1985},"translation",{"id":37,"slug":1987},"globalization",{"id":57,"slug":1989},"gilt",{"id":20,"status":5,"owner":1968,"created_on":1991,"title":352,"excerpt":1992,"content":1993,"slug":1854,"meta_title":10,"meta_description":10,"canonical":10,"related_terms":1994},"2022-03-17T12:22:54.000Z","The process of preparing a product for a particular market.","Localization (l10n) is an essential part of the **[internationalization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization)** process. During localization, a product is prepared to be used in a particular destination, language and culture. Part of the localization process consists of changing locales such as currency, text orientation, or date format; and aligning the product with local, technical, or legislative requirements.\n\nA crucial part of localization is **[translation](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ftranslation\u002F)**.\n\nLocalization is the process of adapting an internationalized product to meet the specific needs of a target market by translating it into the native language of that market. This includes translating the user interface, text, graphics, and other content to match the specific target locale.\n\nThe goal of localization is to provide an optimal user experience for the target market, as well as to make the product accessible to a wider audience. This process often involves more than just translation, and may include adjusting graphics, changing text length to accommodate different writing systems, and modifying the product's layout to fit cultural differences.\n\nInternationalization and localization are essential components of **[globalization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fglobalization)** (g11n) and play a key role in expanding a product's reach and success. It's important to ensure that any Creative Commons attribution is considered during localization to prevent copyright infringement.\n\nBy localizing products, companies can reach new markets and increase their customer base, ultimately helping their business grow and thrive. The number of letters in the term i18n and l10n refers to the number of characters between the first and last letters in the term, and is used as a shorthand for internationalization and localization, respectively.",[1995,1996,1997,1998,2000],{"id":20,"slug":1854},{"id":33,"slug":1985},{"id":57,"slug":1989},{"id":291,"slug":1999},"translation-management-system-tms",{"id":1976,"slug":1981},{"id":2002,"status":5,"owner":2003,"created_on":2004,"title":2005,"excerpt":2006,"content":2007,"slug":2008,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":2009},255,"a5e46ee7-1f50-4f81-ae2d-68a664c76aa2","2026-05-12T07:09:24.000Z","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",[2010,2011,2013,2016,2018],{"id":1613,"slug":647},{"id":1890,"slug":2012},"icu",{"id":2014,"slug":2015},116,"yaml",{"id":1181,"slug":2017},"placeholder",{"id":2019,"slug":2020},274,"software-localization",{"id":423,"status":5,"owner":1968,"created_on":1969,"title":2022,"excerpt":2023,"content":2024,"slug":2025,"meta_title":10,"meta_description":10,"canonical":10,"related_terms":2026},"Locale","In software, the term locale refers to the set of parameters defining a language environment. ","Locales are used to define the user's language, region, and other interface preferences (like time zones, date formats, or currencies) to facilitate communication.\n\nUsing the appropiate locale is key to enhance [UX](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fux) and deploy an effective [i18n](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization) strategy. \n\nLocales are identified with:\n- **A language code** for each language variety (i.e. fr for French, de for German or ja for Japanese). \n- **A region code**, in case differentiation is needed, like es_MX for Mexican Spanish, en_AU for Australian English or it_CH for Swiss Italian.\n\nClassification of locales is governed by the [ISO 639](https:\u002F\u002Fwww.iso.org\u002Fiso-639-language-code) standard.\n\n*See the available Localazy's [locale guides](https:\u002F\u002Flocalazy.com\u002Ftags\u002Flocales) in our blog.*","locale",[],"Angular is a powerful web framework that helps developers build fast and scalable applications. In this guide, we’ll create an app to explore how to localize an Angular project using angular-i18n and Localazy. The result? Quick, easy, streamlined translations. Let's get into it. ","\u003Cp>\u003Ca href=\"https:\u002F\u002Fangular.dev\u002F\">Angular\u003C\u002Fa> is a web framework that empowers developers to build fast, reliable applications. It provides a broad suite of tools, APIs, and libraries to simplify and streamline your development workflow.\u003C\u002Fp>\u003Cp>The framework gives you a solid platform on which to build fast, reliable applications that scale with both the size of your team and the size of your codebase. In this article, we will create a demo app showing how to localize an Angular app with \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Fguide\u002Fi18n\">angular-18n\u003C\u002Fa> and Localazy.\u003C\u002Fp>\u003Ch2 id=\"prerequisites\">📋 Prerequisites \u003Ca class=\"markdownit-header-anchor\" href=\"#prerequisites\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cstrong>Install\u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002F\"> Node.js\u003C\u002Fa>\u003C\u002Fstrong> if you don't have it already. The Angular CLI requires a minimum Node.js version of v20.19 for Angular v20, which is the most recent version as of the time of writing this article.\u003C\u002Fli>\u003Cli>\u003Cstrong>Install \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Finstallation#install-angular-cli\">Angular CLI\u003C\u002Fa> \u003C\u002Fstrong>using the command \u003Ccode>npm install -g @angular\u002Fcli\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"set-up-a-new-angular-project\">👩🏾‍💻 Set up a new Angular project \u003Ca class=\"markdownit-header-anchor\" href=\"#set-up-a-new-angular-project\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>In your terminal, run the CLI command \u003Ccode>ng new\u003C\u002Fcode> with the desired project name. In the following example, we'll be using the \u003Ccode>angular-i18n-localazy-demo\u003C\u002Fcode>project name:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-shell\">ng new angular-i18n-localazy-demo\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You will be presented with some configuration options for your project. Use the arrow and enter keys to navigate and select which options you desire.\u003C\u002Fp>\u003Cp>If you don't have any preferences, just hit Enter to take the default options and continue with the setup.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1884\" height=\"1246\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 1884w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>At this point, we are ready to run our project locally!\u003C\u002Fp>\u003Cp>To start a local development server, run the command:\u003C\u002Fp>\u003Cpre>\u003Ccode>ng run start\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command should open a browser window with the application running.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1426\" height=\"896\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png 1426w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>We can temporarily stop the server and initiate the process of internationalization.\u003C\u002Fp>\u003Cblockquote>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization\">Internationalization (i18n)\u003C\u002Fa>\u003C\u002Fstrong> is the process of preparing your application to support multiple languages and regional formats without needing code changes. It involves extracting text from templates, managing translation files, and handling formats like dates or currencies.\u003C\u002Fblockquote>\u003Cp>The package that is needed for internationalization in Angular is \u003Ccode>@angular\u002Flocalize\u003C\u002Fcode>. It was introduced in v9 and adds i18n support to an Angular app. \u003C\u002Fp>\u003Cp>You can find detailed information about \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Fguide\u002Fi18n\">internationalization\u003C\u002Fa> in the official Angular documentation.\u003C\u002Fp>\u003Cp>To add the \u003Ccode>@angular\u002Flocalize\u003C\u002Fcode> package, use the following command to update the \u003Ccode>package.json\u003C\u002Fcode> and TypeScript configuration files in your project:\u003C\u002Fp>\u003Cpre>\u003Ccode>ng add @angular\u002Flocalize\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1224\" height=\"320\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png 1224w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"preparing-templates-for-translations\">🔧 Preparing templates for translations \u003Ca class=\"markdownit-header-anchor\" href=\"#preparing-templates-for-translations\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Our project should follow a standard Angular project structure. We’ll do some work on our \u003Ccode>app\u003C\u002Fcode> component template. The \u003Ccode>app.html\u003C\u002Fcode> file placement is shown in the tree below.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1140\" height=\"316\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png 1140w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Open the file \u003Ccode>app.html\u003C\u002Fcode> and replace its content with our boilerplate:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-Angular\">&lt;style&gt;\n  h1 {\n    font-size: 2.125rem;\n  }\n\n  main {\n    width: 60%;\n    margin: 10% auto;\n    padding: 50px;\n    background: #eae6e4;\n  }\n\n  div {\n    padding: 5px 0;\n  }\n  span {\n    padding: 5px;\n  }\n&lt;\u002Fstyle&gt;\n\n&lt;main class=\"main\"&gt;\n  &lt;!-- CODE 1 --&gt;\n  &lt;h1 i18n&gt;\n    Hello!! We're thrilled that you've decided to use Localazy for translating your {{ title() }} app!\n  &lt;\u002Fh1&gt;\n\n  &lt;!-- CODE 2 --&gt;\n &lt;ng-container i18n&gt;I am free, wrapped just in a body&lt;\u002Fng-container&gt;\n\n  &lt;!-- CODE 3 --&gt;\n  &lt;div\n    i18n=\"merged div translation\"\n    i18n-data-title=\"merged div translation\"\n    data-title=\"Can we also translate this? Awesome!\"\n  &gt;\n    Can we also translate this? Awesome!\n  &lt;\u002Fdiv&gt;\n\n  &lt;!-- CODE 3 --&gt;\n  &lt;div&gt;\n    &lt;input type=\"number\" min=\"0\" [(ngModel)]=\"minutes\" \u002F&gt;\n    &lt;span i18=\"icu_plural\"&gt;\n      Updated {minutes(), plural, =1 {one minute ago} other {{{ minutes() }} minutes ago}}\n    &lt;\u002Fspan&gt;\n  &lt;\u002Fdiv&gt;\n\n  &lt;!-- CODE 4 --&gt;\n  &lt;div&gt;\n    &lt;select [(ngModel)]=\"user\"&gt;\n      &lt;option value=\"male\" i18n&gt;Male&lt;\u002Foption&gt;\n      &lt;option value=\"female\" i18n&gt;Female&lt;\u002Foption&gt;\n      &lt;option value=\"you\" i18n&gt;in love with Localazy!&lt;\u002Foption&gt;\n    &lt;\u002Fselect&gt;\n    &lt;span i18n&gt;The author is {{ user() }}&lt;\u002Fspan&gt;\n  &lt;\u002Fdiv&gt;\n&lt;\u002Fmain&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"block-1-i18n-attribute\">Block 1: i18n attribute \u003Ca class=\"markdownit-header-anchor\" href=\"#block-1-i18n-attribute\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cpre>\u003Ccode>&lt;h1 i18n&gt;\n    Hello!! We're thrilled that you've decided to use Localazy for translating your {{ title() }} app!\n &lt;\u002Fh1&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The \u003Ccode>i18n\u003C\u002Fcode> attribute marks the text within the \u003Cem>&lt;h1&gt;\u003C\u002Fem> tag for translation. The extracted translated files will appear in the translation file, allowing translators to provide equivalents in other languages. \u003C\u002Fp>\u003Ch3 id=\"block-2-text-grouping\">Block 2: Text grouping \u003Ca class=\"markdownit-header-anchor\" href=\"#block-2-text-grouping\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cpre>\u003Ccode>&lt;ng-container i18n&gt;I am free, wrapped just in a body&lt;\u002Fng-container&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Ccode>&lt;ng-container&gt;\u003C\u002Fcode> is a\u003Cstrong> \u003C\u002Fstrong>grouping element in Angular templates that does not render any actual HTML in the DOM. This means the text exists freely within the body without any form of tags or wrappers. The \u003Ccode>i18n\u003C\u002Fcode> attribute also marks the text within for translation.\u003C\u002Fp>\u003Ch3 id=\"block-3-data-attributes\">Block 3: Data attributes \u003Ca class=\"markdownit-header-anchor\" href=\"#block-3-data-attributes\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cpre>\u003Ccode> &lt;div\n    i18n=\"merged div translation\"\n    i18n-data-title=\"merged div translation\"\n    data-title=\"Can we also translate this? Awesome!\"\n  &gt;\n    Can we also translate this? Awesome!\n  &lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Within the &lt;div&gt; tag, we can translate both the element text and HTML attributes (like \u003Ccode>data-title\u003C\u002Fcode>). \u003C\u002Fp>\u003Cp>\u003Ccode>i18n=\"merged div translation\"\u003C\u002Fcode> provides a description to translators, while \u003Ccode>i18n-data-title=\"merged div translation\"\u003C\u002Fcode> marks the data-title attribute for translation as well.\u003C\u002Fp>\u003Ch3 id=\"block-4-pluralization\">Block 4: Pluralization \u003Ca class=\"markdownit-header-anchor\" href=\"#block-4-pluralization\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cpre>\u003Ccode> &lt;div&gt;\n     &lt;input type=\"number\" min=\"0\" [(ngModel)]=\"minutes\" \u002F&gt;\n      &lt;br \u002F&gt;\n      &lt;span i18n&gt;Updated &lt;\u002Fspan&gt;\n      &lt;span i18=\"icu_plural\"&gt;\n        {minutes(), plural, =1 {one minute ago} other {{{ minutes() }} minutes ago}}\n      &lt;\u002Fspan&gt;\n &lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This block handles pluralization with Angular’s ICU syntax. The input binds to the component variable \u003Ccode>minutes\u003C\u002Fcode> using \u003Ccode>[(ngModel)]\u003C\u002Fcode>. The first span marks the text within the tag for translation. The second span displays a message that depends on the \u003Ccode>\u003Cstrong>minutes\u003C\u002Fstrong>\u003C\u002Fcode> value:\u003C\u002Fp>\u003Cp>If \u003Ccode>minutes\u003C\u002Fcode> == 1, the span reflects \u003Cem>one minute ago\u003C\u002Fem>. Otherwise, the span shows, for example, \u003Cem>5 minutes ago\u003C\u002Fem>.\u003C\u002Fp>\u003Cdiv class=\"kg-card kg-callout-card kg-callout-card-blue\">\u003Cdiv class=\"kg-callout-emoji\">☝️\u003C\u002Fdiv>\u003Cdiv class=\"kg-callout-text\">\u003Cstrong>Note\u003C\u002Fstrong>: Different languages abide by diverse pluralization rules. Following these rules is \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fpluralization-in-software-localization-beginners-guide\u002F\">one of the most demanding tasks\u003C\u002Fa> when localizing apps. For instance, English has pretty straightforward rules. A word can have either a singular or a plural form (also known as \u003Cem>“one”\u003C\u002Fem> and \u003Cem>“other”\u003C\u002Fem>). The Czech language, however, is quite complicated as it distinguishes \u003Cem>“one”\u003C\u002Fem>, \u003Cem>“few”,\u003C\u002Fem> and \u003Cem>“other”\u003C\u002Fem> forms. Luckily, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fplurals\u002F\">Localazy covers the entire specification\u003C\u002Fa> automatically!\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>The code snippet above respects the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fcldr\">CLDR\u003C\u002Fa> rules and, therefore, will be parsed in Localazy. If we don’t respect the rules, we do not lose a phrase, don’t worry. It will be transferred to Localazy and kept as-is.\u003C\u002Fp>\u003Cblockquote>You can get familiar with the list of possible forms for common world languages on the \u003Ca href=\"https:\u002F\u002Funicode-org.github.io\u002Fcldr-staging\u002Fcharts\u002F37\u002Fsupplemental\u002Flanguage_plural_rules.html\">Language Plural Rules\u003C\u002Fa> of the \u003Ca href=\"http:\u002F\u002Fcldr.unicode.org\u002F\">Unicode Common Locale Data Repository (CLDR)\u003C\u002Fa>\u003C\u002Fblockquote>\u003Ch3 id=\"block-5-user-attributes\">Block 5: User attributes \u003Ca class=\"markdownit-header-anchor\" href=\"#block-5-user-attributes\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cpre>\u003Ccode>&lt;div&gt;\n    &lt;select [(ngModel)]=\"user\"&gt;\n      &lt;option value=\"male\" i18n&gt;Male&lt;\u002Foption&gt;\n      &lt;option value=\"female\" i18n&gt;Female&lt;\u002Foption&gt;\n      &lt;option value=\"you\" i18n&gt;in love with Localazy!&lt;\u002Foption&gt;\n    &lt;\u002Fselect&gt;\n    &lt;span i18n&gt;The author is {{ user() }}&lt;\u002Fspan&gt;\n  &lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The \u003Ccode>&lt;select&gt;\u003C\u002Fcode> binds to a component variable user. The options themselves (Male, Female, etc.) are marked with i18n for translation. \u003C\u002Fp>\u003Cp>The span displays: \"The author is male\" \u002F \"The author is female\" \u002F \"The author is in love with Localazy!\" depending on the selected value.\u003C\u002Fp>\u003Cp>To avoid compilation errors, we need to import \u003Ccode>FormsModule\u003C\u002Fcode> into our \u003Ccode>app.ts\u003C\u002Fcode> file. This gives template-driven forms support, like \u003Ccode>[(ngModel)]\u003C\u002Fcode>. \u003C\u002Fp>\u003Cp>We can also include the code snippets:\u003C\u002Fp>\u003Cpre>\u003Ccode>protected readonly minutes = signal(0);\nprotected readonly user = signal('localazy');\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Signal\u003C\u002Fstrong> is the new Angular reactive primitive (introduced in Angular v16) used to create reactive state variables just like \u003Ccode>useState()\u003C\u002Fcode>in React. Each property (\u003Ccode>minutes\u003C\u002Fcode>, \u003Ccode>user\u003C\u002Fcode>) is a \u003Cstrong>signal, \u003C\u002Fstrong>a reactive value that automatically triggers re-render when changed.\u003C\u002Fp>\u003Cp>Modify the file so it looks like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>import { Component, signal } from '@angular\u002Fcore';\nimport { RouterOutlet } from '@angular\u002Frouter';\nimport { FormsModule } from '@angular\u002Fforms';\n\n@Component({\n  selector: 'app-root',\n  imports: [RouterOutlet, FormsModule],\n  templateUrl: '.\u002Fapp.html',\n  styleUrl: '.\u002Fapp.css'\n})\nexport class App {\n  protected readonly title = signal('angular-i18n-localazy-demo');\n  protected readonly minutes = signal(0);\n  protected readonly user = signal('localazy');\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The UI should be similar to the following screenshot:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"732\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 2116w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"extracting-a-source-language-file\">📨 Extracting a source language file \u003Ca class=\"markdownit-header-anchor\" href=\"#extracting-a-source-language-file\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Our template is now prepared and ready to be translated. Now we need to define a source language in the \u003Ccode>angular.json\u003C\u002Fcode> configuration file. Open the file and add:\u003C\u002Fp>\u003Cpre>\u003Ccode>...\n\"projects\": {\n  \"angular-i18n-localazy-demo\": {\n    ...\n    \"i18n\": {\n        \"sourceLocale\": \"en\",\n      },\n      ...\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>To ensure that we have a correct setup, a \u003Ccode>sourceLocale\u003C\u002Fcode> value should be equal to Localazy project’s source language code (in our case \u003Cem>“en”\u003C\u002Fem>).\u003C\u002Fp>\u003Cp>Next, we'll use the Angular CLI command to extract the marked text in the template into the source language file. Open a terminal window in the project root directory and run:\u003C\u002Fp>\u003Cpre>\u003Ccode>ng extract-i18n --output-path src\u002Flocale --out-file en.xliff --format=xlf2\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command creates a \u003Ccode>en.xliff\u003C\u002Fcode> file in the \u003Ccode>.\u002Fsrc\u002Flocale\u003C\u002Fcode> directory.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.42.26-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"660\" height=\"148\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.42.26-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.42.26-PM.png 660w\">\u003C\u002Ffigure>\u003Ch2 id=\"localization-with-localazy\">🪁 Localization with Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#localization-with-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Once your app is internationalized, \u003Cstrong>localization (l10n)\u003C\u002Fstrong> comes into play, as this is where you adapt your app for specific audiences by translating the extracted text, adjusting formats, and applying cultural differences. \u003C\u002Fp>\u003Cblockquote>i18n sets up your app for global readiness, while localization makes it feel native to each user’s region\u003C\u002Fblockquote>\u003Cp>This is the part where the real fun begins. In any project, we certainly do not want to handle things that can be automated manually. \u003Cstrong>A manual approach is error-prone, boring, and takes a long time\u003C\u002Fstrong>. And localization is undoubtedly one of the processes that can benefit from automation.\u003C\u002Fp>\u003Ch3 id=\"create-a-new-project\">Create a new project \u003Ca class=\"markdownit-header-anchor\" href=\"#create-a-new-project\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Go to \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fregister\">Localazy signup\u003C\u002Fa>, join our community by creating an account, then create a new project. We can leave it public so other contributors can freely help with translating our app. Select English as a source language (generally, of course, you can use any other). Also, enable the \u003Cem>Use community translations (\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm\">ShareTM\u003C\u002Fa>)\u003C\u002Fem> option, so some parts of the app can be translated automatically. \u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1874\" height=\"866\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 1874w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The project is successfully created. On the integration filter, we can search and choose Angular.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1906\" height=\"964\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 1906w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"angular-integration-and-content-upload\">Angular integration and content upload \u003Ca class=\"markdownit-header-anchor\" href=\"#angular-integration-and-content-upload\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>After clicking on the \u003Cem>Angular\u003C\u002Fem> button, we see the integration instructions. \u003C\u002Fp>\u003Cp>Let’s dig into the process a step at a time:\u003C\u002Fp>\u003Col>\u003Cli>Install \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Finstallation\">Localazy CLI\u003C\u002Fa> by running the command in our demo app’s terminal.\u003C\u002Fli>\u003C\u002Fol>\u003Cpre>\u003Ccode>npm install -g @localazy\u002Fcli\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>2.  Afterwards, create a configuration file \u003Ccode>localazy.json\u003C\u002Fcode> in the root folder of your project. Modify the file and include the following snippets:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n\n  \"writeKey\": \"&lt;your-write-key&gt;\",\n  \"readKey\": \"&lt;your-read-key&gt;\",\n  \n  \"upload\": {  \n    \"type\": \"xliff\",\n    \"files\": \"src\u002Flocale\u002Fen.xliff\",\n    \"features\": [\"parse_plurals_icu\"]\n  },\n  \n  \"download\": {\n    \"files\": \"src\u002Flocale\u002F${lang}.xliff\"\n  }\n  \n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp> The \u003Cstrong>writeKey\u003C\u002Fstrong> and the \u003Cstrong>readKey\u003C\u002Fstrong> can be obtained from the \u003Cem>Access Keys\u003C\u002Fem> tab on the project dashboard. These keys are used to authorize our request.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"843\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The \u003Cstrong>upload\u003C\u002Fstrong> section instructs Localazy CLI on how to collect files to be uploaded and, optionally, provides metadata for these files. In our case, the type of file we'll upload to the dashboard is an XLIFF file, which can be found in the \u003Ccode>\u003Cstrong>src\u002Flocale\u003C\u002Fstrong>\u003C\u002Fcode> directory. Because we have defined some plurals string resources in ICU Message Format earlier, we need to add \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fxliff-20-format#icu-plurals\">parsing support\u003C\u002Fa> for ICU plurals within the upload section.\u003C\u002Fp>\u003Cp>The \u003Cstrong>download\u003C\u002Fstrong> section describes how to process translated files and where to write them. In our case, after successful translation, the downloaded translated files will be placed in \u003Cstrong>\u003Ccode>src\u002Flocale\u002F${lang}\u003C\u002Fcode>, \u003C\u002Fstrong>where \u003Cem>lang\u003C\u002Fem> is the language of the translated file.\u003C\u002Fp>\u003Cp>Now it’s finally time to upload our source language phrases to Localazy. Navigate to the project terminal and run the following command:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy upload -s\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Great! We’ve just simulated (\u003Ccode>-s\u003C\u002Fcode> stands for simulate) the upload without actually uploading anything. It is \u003Cstrong>a good practice to test out the configuration\u003C\u002Fstrong> to make sure that nothing unexpected occurs. \u003C\u002Fp>\u003Cp>For example, having an incorrect writeKey or (and) readKey pasted would output lines similar to these:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1146\" height=\"610\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png 1146w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>However, with the correct writeKey and readKey, a proper simulation will verify and validate the process. \u003C\u002Fp>\u003Cp>Now let’s upload the phrases for real:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy upload\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>We can either refresh the browser to see the uploaded content or redirect to the project link in the terminal:\u003C\u002Fp>\u003Cpre>\u003Ccode>Verifying...\n\nValidating...\n\nUploading 1 kB...\n\nUpload results: 9 added, 0 updated, 0 deprecated\nUsing 230 out of 800 source keys\n\nYour app on Localazy: https:\u002F\u002Flocalazy.com\u002Fp\u002Fangular-localize-app\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"translation-and-download\">Translation and download \u003Ca class=\"markdownit-header-anchor\" href=\"#translation-and-download\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>The next step is to add new languages. \u003C\u002Fp>\u003Cp>In our case, we will be translating our content to \u003Cstrong>Czech (cs)\u003C\u002Fstrong> and \u003Cstrong>Spanish(es)\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1280\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Using the pluralization rules we mentioned earlier, we can notice that Localazy automatically recognized the language plural rules. When translating to Czech(cs), we can see that we have options for \u003Cem>one, few, and others\u003C\u002Fem>, while for the translation to Spanish(es), we have options for only \u003Cem>one and others \u003C\u002Fem>according to the language plural rules noted above:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1242\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>Czech plurals.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cblockquote>Translating plural rules is possible either through pre-translation with Localazy AI or using human translators. Both suggestions can be activated for the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftiers\u002Fautopilot\">Autopilot plan\u003C\u002Fa> and higher.\u003C\u002Fblockquote>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1129\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>Spanish plurals.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>After the initial automatic translations with \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fmachine-translations\u002F\">your preferred MT engine\u003C\u002Fa> or Localazy AI, we can invite human reviewers as contributors and translators by email and assigning them a specific language to translate:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"528\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>We can also place an order for \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fcontinuous-localization-team\">professional human translators and reviewers\u003C\u002Fa> and let Localazy’s team of professional linguists handle it for you. This hybrid process checks and improve these translations, giving us speed and accuracy with less manual effort.\u003C\u002Fp>\u003Cp>Let’s finish translating our app and get back to our Angular project.\u003C\u002Fp>\u003Cp>It’s time to download our translated phrases:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-shell\">localazy download\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command downloads all the freshly added languages and newly accepted phrases. We now have the \u003Cem>cs.xliff \u003C\u002Fem>and \u003Cem>es.xliff\u003C\u002Fem> files in our \u003Cem>locale\u003C\u002Fem> folder containing translated phrases. Let’s build the project!\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.14.07-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"640\" height=\"228\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.14.07-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.14.07-PM.png 640w\">\u003C\u002Ffigure>\u003Ch2 id=\"build-your-project-in-different-languages\">🗣️ Build your project in different languages \u003Ca class=\"markdownit-header-anchor\" href=\"#build-your-project-in-different-languages\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Due to the deployment complexities of i18n and the need to minimize rebuild time, the development server only supports localizing a single locale at a time. For these reasons, we need to update the \u003Cem>angular.json\u003C\u002Fem> project configuration that allows serving more locales at distinct ports at the same time.\u003C\u002Fp>\u003Cp>Firstly, we need to \u003Cstrong>define locales in the build configuration\u003C\u002Fstrong>. Use the \u003Cem>i18n\u003C\u002Fem> project option to define a map of locale identifiers to translation files. Adapt the following code snippet from angular.json:\u003C\u002Fp>\u003Cpre>\u003Ccode>...\n\"projects\": {\n  \"angular-i18n-localazy-demo\": {\n    ...\n    \"i18n\": {\n        \"sourceLocale\": \"en\",\n        \"locales\": {\n           \"cs\": {\n            \"translation\": \"src\u002Flocale\u002Fcs.xliff\"\n          },\n          \"es\": {\n            \"translation\": \"src\u002Flocale\u002Fes.xliff\"\n          }\n        }\n      },\n      ...\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Next, we need to \u003Cstrong>apply specific build options for each locale\u003C\u002Fstrong>. To do that, we can create a custom locale-specific configuration by specifying a single locale, as shown in the following example:\u003C\u002Fp>\u003Cpre>\u003Ccode>...\n\"projects\": {\n  \"angular-i18n-localazy-demo\": {\n    ...\n    \"architect\": {\n      \"build\": {\n        ...\n        \"configurations\":  {\n          ...\n          \"cs\": {\n              \"localize\": [\n                \"cs\"\n              ]\n            },\n            \"es\": {\n              \"localize\": [\n                \"es\"\n              ]\n            },\n            \"en\": {\n              \"localize\": [\n                \"en\"\n              ]\n            }\n        }\n      },\n      \"serve\": {\n        ...\n        \"configurations\": {\n          ...\n          \"en\": {\n              \"buildTarget\": \"angular-i18n-localazy-demo:build:en\",\n              \"port\": 4200\n            },\n            \"cs\": {\n              \"buildTarget\": \"angular-i18n-localazy-demo:build:cs\",\n              \"port\": 4201\n            },\n            \"es\": {\n              \"buildTarget\": \"angular-i18n-localazy-demo:build:es\",\n              \"port\": 4202\n            }\n        }\n      }\n    },\n    ...\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Great! Our locale-specific project configuration is ready. Use three terminal windows pointing into the project root and run a command in each:\u003C\u002Fp>\u003Cpre>\u003Ccode># 1st terminal window\nng serve -c=en\n\n# 2nd terminal window\nng serve -c=cs\n\n# 3rd terminal window\nng serve -c=es\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"819\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>The source English UI.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"860\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>The resulting Czech UI...\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"880\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>and the translated Spanish UI.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"conclusion\">✔️ Conclusion \u003Ca class=\"markdownit-header-anchor\" href=\"#conclusion\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>In this article, we demonstrated how to use Localazy and the angular-i18n library to localize an Angular App. Localazy is a powerful tool that makes translating Angular and other applications faster, easier, error-proof, and more fun.\u003C\u002Fp>\u003Cp>Now, you can\u003Cstrong> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flocalazy\u002Fangular-i18n-example\">download the repository\u003C\u002Fa> with the demo project to explore it\u003C\u002Fstrong> or \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fregister\">start localizing Angular apps\u003C\u002Fa> on your own! If you have any questions, check out the Localazy \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fintegrations\u002Fangular\u002F\">FAQs\u003C\u002Fa> about the framework or \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fcontact\">drop the team a line\u003C\u002Fa> for quick support. 📞\u003C\u002Fp>",{"id":365,"status":5,"created_on":2030,"modified_on":2031,"icon":2032,"header":2033,"description":2034,"button_label":2035,"link":2036},"2025-04-22T13:11:52.000Z","2025-04-22T13:55:18.000Z","app","Explore our developer hub 🧑‍💻","Got questions? Find quick answers in our Developer Portal, a space built for you with easy access to repositories, documentation, SDKs, and more.","Take me there","\u002Fdeveloper-portal",{"slug":1907,"id":1949,"uuid":2038,"title":1906,"html":2039,"comment_id":2040,"feature_image":1908,"featured":160,"visibility":2041,"email_recipient_filter":2042,"created_at":2043,"updated_at":1955,"published_at":1956,"custom_excerpt":2027,"codeinjection_head":2044,"codeinjection_foot":10,"custom_template":2040,"canonical_url":10,"authors":2045,"tags":2052,"primary_author":2113,"primary_tag":2114,"url":2115,"excerpt":2027,"reading_time":15,"access":162,"send_email_when_published":160,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":1909,"meta_description":1910,"email_subject":10,"frontmatter":10,"dictionary":1965,"cta":2029,"plainTags":1957},"a1fd5ef4-33fc-4845-b01a-2450a4278808","\u003Cp>\u003Ca href=\"https:\u002F\u002Fangular.dev\u002F\">Angular\u003C\u002Fa> is a web framework that empowers developers to build fast, reliable applications. It provides a broad suite of tools, APIs, and libraries to simplify and streamline your development workflow.\u003C\u002Fp>\u003Cp>The framework gives you a solid platform on which to build fast, reliable applications that scale with both the size of your team and the size of your codebase. In this article, we will create a demo app showing how to localize an Angular app with \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Fguide\u002Fi18n\">angular-18n\u003C\u002Fa> and Localazy.\u003C\u002Fp>\u003Ch2 id=\"-prerequisites\">📋 Prerequisites\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cstrong>Install\u003Ca href=\"https:\u002F\u002Fnodejs.org\u002Fen\u002F\"> Node.js\u003C\u002Fa>\u003C\u002Fstrong> if you don't have it already. The Angular CLI requires a minimum Node.js version of v20.19 for Angular v20, which is the most recent version as of the time of writing this article.\u003C\u002Fli>\u003Cli>\u003Cstrong>Install \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Finstallation#install-angular-cli\">Angular CLI\u003C\u002Fa> \u003C\u002Fstrong>using the command \u003Ccode>npm install -g @angular\u002Fcli\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"-set-up-a-new-angular-project\">👩🏾‍💻 Set up a new Angular project\u003C\u002Fh2>\u003Cp>In your terminal, run the CLI command \u003Ccode>ng new\u003C\u002Fcode> with the desired project name. In the following example, we'll be using the \u003Ccode>angular-i18n-localazy-demo\u003C\u002Fcode>project name:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-shell\">ng new angular-i18n-localazy-demo\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You will be presented with some configuration options for your project. Use the arrow and enter keys to navigate and select which options you desire.\u003C\u002Fp>\u003Cp>If you don't have any preferences, just hit Enter to take the default options and continue with the setup.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1884\" height=\"1246\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-09-at-2.57.20-PM.png 1884w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>At this point, we are ready to run our project locally!\u003C\u002Fp>\u003Cp>To start a local development server, run the command:\u003C\u002Fp>\u003Cpre>\u003Ccode>ng run start\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command should open a browser window with the application running.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1426\" height=\"896\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.24.31-PM.png 1426w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>We can temporarily stop the server and initiate the process of internationalization.\u003C\u002Fp>\u003Cblockquote>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization\">Internationalization (i18n)\u003C\u002Fa>\u003C\u002Fstrong> is the process of preparing your application to support multiple languages and regional formats without needing code changes. It involves extracting text from templates, managing translation files, and handling formats like dates or currencies.\u003C\u002Fblockquote>\u003Cp>The package that is needed for internationalization in Angular is \u003Ccode>@angular\u002Flocalize\u003C\u002Fcode>. It was introduced in v9 and adds i18n support to an Angular app. \u003C\u002Fp>\u003Cp>You can find detailed information about \u003Ca href=\"https:\u002F\u002Fangular.dev\u002Fguide\u002Fi18n\">internationalization\u003C\u002Fa> in the official Angular documentation.\u003C\u002Fp>\u003Cp>To add the \u003Ccode>@angular\u002Flocalize\u003C\u002Fcode> package, use the following command to update the \u003Ccode>package.json\u003C\u002Fcode> and TypeScript configuration files in your project:\u003C\u002Fp>\u003Cpre>\u003Ccode>ng add @angular\u002Flocalize\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1224\" height=\"320\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-15-at-1.54.02-PM.png 1224w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"-preparing-templates-for-translations\">🔧 Preparing templates for translations\u003C\u002Fh2>\u003Cp>Our project should follow a standard Angular project structure. We’ll do some work on our \u003Ccode>app\u003C\u002Fcode> component template. The \u003Ccode>app.html\u003C\u002Fcode> file placement is shown in the tree below.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1140\" height=\"316\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-16-at-10.48.12-AM.png 1140w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Open the file \u003Ccode>app.html\u003C\u002Fcode> and replace its content with our boilerplate:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-Angular\">&lt;style&gt;\n  h1 {\n    font-size: 2.125rem;\n  }\n\n  main {\n    width: 60%;\n    margin: 10% auto;\n    padding: 50px;\n    background: #eae6e4;\n  }\n\n  div {\n    padding: 5px 0;\n  }\n  span {\n    padding: 5px;\n  }\n&lt;\u002Fstyle&gt;\n\n&lt;main class=\"main\"&gt;\n  &lt;!-- CODE 1 --&gt;\n  &lt;h1 i18n&gt;\n    Hello!! We're thrilled that you've decided to use Localazy for translating your {{ title() }} app!\n  &lt;\u002Fh1&gt;\n\n  &lt;!-- CODE 2 --&gt;\n &lt;ng-container i18n&gt;I am free, wrapped just in a body&lt;\u002Fng-container&gt;\n\n  &lt;!-- CODE 3 --&gt;\n  &lt;div\n    i18n=\"merged div translation\"\n    i18n-data-title=\"merged div translation\"\n    data-title=\"Can we also translate this? Awesome!\"\n  &gt;\n    Can we also translate this? Awesome!\n  &lt;\u002Fdiv&gt;\n\n  &lt;!-- CODE 3 --&gt;\n  &lt;div&gt;\n    &lt;input type=\"number\" min=\"0\" [(ngModel)]=\"minutes\" \u002F&gt;\n    &lt;span i18=\"icu_plural\"&gt;\n      Updated {minutes(), plural, =1 {one minute ago} other {{{ minutes() }} minutes ago}}\n    &lt;\u002Fspan&gt;\n  &lt;\u002Fdiv&gt;\n\n  &lt;!-- CODE 4 --&gt;\n  &lt;div&gt;\n    &lt;select [(ngModel)]=\"user\"&gt;\n      &lt;option value=\"male\" i18n&gt;Male&lt;\u002Foption&gt;\n      &lt;option value=\"female\" i18n&gt;Female&lt;\u002Foption&gt;\n      &lt;option value=\"you\" i18n&gt;in love with Localazy!&lt;\u002Foption&gt;\n    &lt;\u002Fselect&gt;\n    &lt;span i18n&gt;The author is {{ user() }}&lt;\u002Fspan&gt;\n  &lt;\u002Fdiv&gt;\n&lt;\u002Fmain&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"block-1-i18n-attribute\">Block 1: i18n attribute\u003C\u002Fh3>\u003Cpre>\u003Ccode>&lt;h1 i18n&gt;\n    Hello!! We're thrilled that you've decided to use Localazy for translating your {{ title() }} app!\n &lt;\u002Fh1&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The \u003Ccode>i18n\u003C\u002Fcode> attribute marks the text within the \u003Cem>&lt;h1&gt;\u003C\u002Fem> tag for translation. The extracted translated files will appear in the translation file, allowing translators to provide equivalents in other languages. \u003C\u002Fp>\u003Ch3 id=\"block-2-text-grouping\">Block 2: Text grouping\u003C\u002Fh3>\u003Cpre>\u003Ccode>&lt;ng-container i18n&gt;I am free, wrapped just in a body&lt;\u002Fng-container&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Ccode>&lt;ng-container&gt;\u003C\u002Fcode> is a\u003Cstrong> \u003C\u002Fstrong>grouping element in Angular templates that does not render any actual HTML in the DOM. This means the text exists freely within the body without any form of tags or wrappers. The \u003Ccode>i18n\u003C\u002Fcode> attribute also marks the text within for translation.\u003C\u002Fp>\u003Ch3 id=\"block-3-data-attributes\">Block 3: Data attributes\u003C\u002Fh3>\u003Cpre>\u003Ccode> &lt;div\n    i18n=\"merged div translation\"\n    i18n-data-title=\"merged div translation\"\n    data-title=\"Can we also translate this? Awesome!\"\n  &gt;\n    Can we also translate this? Awesome!\n  &lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Within the &lt;div&gt; tag, we can translate both the element text and HTML attributes (like \u003Ccode>data-title\u003C\u002Fcode>). \u003C\u002Fp>\u003Cp>\u003Ccode>i18n=\"merged div translation\"\u003C\u002Fcode> provides a description to translators, while \u003Ccode>i18n-data-title=\"merged div translation\"\u003C\u002Fcode> marks the data-title attribute for translation as well.\u003C\u002Fp>\u003Ch3 id=\"block-4-pluralization\">Block 4: Pluralization\u003C\u002Fh3>\u003Cpre>\u003Ccode> &lt;div&gt;\n     &lt;input type=\"number\" min=\"0\" [(ngModel)]=\"minutes\" \u002F&gt;\n      &lt;br \u002F&gt;\n      &lt;span i18n&gt;Updated &lt;\u002Fspan&gt;\n      &lt;span i18=\"icu_plural\"&gt;\n        {minutes(), plural, =1 {one minute ago} other {{{ minutes() }} minutes ago}}\n      &lt;\u002Fspan&gt;\n &lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This block handles pluralization with Angular’s ICU syntax. The input binds to the component variable \u003Ccode>minutes\u003C\u002Fcode> using \u003Ccode>[(ngModel)]\u003C\u002Fcode>. The first span marks the text within the tag for translation. The second span displays a message that depends on the \u003Ccode>\u003Cstrong>minutes\u003C\u002Fstrong>\u003C\u002Fcode> value:\u003C\u002Fp>\u003Cp>If \u003Ccode>minutes\u003C\u002Fcode> == 1, the span reflects \u003Cem>one minute ago\u003C\u002Fem>. Otherwise, the span shows, for example, \u003Cem>5 minutes ago\u003C\u002Fem>.\u003C\u002Fp>\u003Cdiv class=\"kg-card kg-callout-card kg-callout-card-blue\">\u003Cdiv class=\"kg-callout-emoji\">☝️\u003C\u002Fdiv>\u003Cdiv class=\"kg-callout-text\">\u003Cstrong>Note\u003C\u002Fstrong>: Different languages abide by diverse pluralization rules. Following these rules is \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fpluralization-in-software-localization-beginners-guide\u002F\">one of the most demanding tasks\u003C\u002Fa> when localizing apps. For instance, English has pretty straightforward rules. A word can have either a singular or a plural form (also known as \u003Cem>“one”\u003C\u002Fem> and \u003Cem>“other”\u003C\u002Fem>). The Czech language, however, is quite complicated as it distinguishes \u003Cem>“one”\u003C\u002Fem>, \u003Cem>“few”,\u003C\u002Fem> and \u003Cem>“other”\u003C\u002Fem> forms. Luckily, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fplurals\u002F\">Localazy covers the entire specification\u003C\u002Fa> automatically!\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cp>The code snippet above respects the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fcldr\">CLDR\u003C\u002Fa> rules and, therefore, will be parsed in Localazy. If we don’t respect the rules, we do not lose a phrase, don’t worry. It will be transferred to Localazy and kept as-is.\u003C\u002Fp>\u003Cblockquote>You can get familiar with the list of possible forms for common world languages on the \u003Ca href=\"https:\u002F\u002Funicode-org.github.io\u002Fcldr-staging\u002Fcharts\u002F37\u002Fsupplemental\u002Flanguage_plural_rules.html\">Language Plural Rules\u003C\u002Fa> of the \u003Ca href=\"http:\u002F\u002Fcldr.unicode.org\u002F\">Unicode Common Locale Data Repository (CLDR)\u003C\u002Fa>\u003C\u002Fblockquote>\u003Ch3 id=\"block-5-user-attributes\">Block 5: User attributes\u003C\u002Fh3>\u003Cpre>\u003Ccode>&lt;div&gt;\n    &lt;select [(ngModel)]=\"user\"&gt;\n      &lt;option value=\"male\" i18n&gt;Male&lt;\u002Foption&gt;\n      &lt;option value=\"female\" i18n&gt;Female&lt;\u002Foption&gt;\n      &lt;option value=\"you\" i18n&gt;in love with Localazy!&lt;\u002Foption&gt;\n    &lt;\u002Fselect&gt;\n    &lt;span i18n&gt;The author is {{ user() }}&lt;\u002Fspan&gt;\n  &lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The \u003Ccode>&lt;select&gt;\u003C\u002Fcode> binds to a component variable user. The options themselves (Male, Female, etc.) are marked with i18n for translation. \u003C\u002Fp>\u003Cp>The span displays: \"The author is male\" \u002F \"The author is female\" \u002F \"The author is in love with Localazy!\" depending on the selected value.\u003C\u002Fp>\u003Cp>To avoid compilation errors, we need to import \u003Ccode>FormsModule\u003C\u002Fcode> into our \u003Ccode>app.ts\u003C\u002Fcode> file. This gives template-driven forms support, like \u003Ccode>[(ngModel)]\u003C\u002Fcode>. \u003C\u002Fp>\u003Cp>We can also include the code snippets:\u003C\u002Fp>\u003Cpre>\u003Ccode>protected readonly minutes = signal(0);\nprotected readonly user = signal('localazy');\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Signal\u003C\u002Fstrong> is the new Angular reactive primitive (introduced in Angular v16) used to create reactive state variables just like \u003Ccode>useState()\u003C\u002Fcode>in React. Each property (\u003Ccode>minutes\u003C\u002Fcode>, \u003Ccode>user\u003C\u002Fcode>) is a \u003Cstrong>signal, \u003C\u002Fstrong>a reactive value that automatically triggers re-render when changed.\u003C\u002Fp>\u003Cp>Modify the file so it looks like this:\u003C\u002Fp>\u003Cpre>\u003Ccode>import { Component, signal } from '@angular\u002Fcore';\nimport { RouterOutlet } from '@angular\u002Frouter';\nimport { FormsModule } from '@angular\u002Fforms';\n\n@Component({\n  selector: 'app-root',\n  imports: [RouterOutlet, FormsModule],\n  templateUrl: '.\u002Fapp.html',\n  styleUrl: '.\u002Fapp.css'\n})\nexport class App {\n  protected readonly title = signal('angular-i18n-localazy-demo');\n  protected readonly minutes = signal(0);\n  protected readonly user = signal('localazy');\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The UI should be similar to the following screenshot:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"732\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-20-at-4.28.10-PM.png 2116w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"-extracting-a-source-language-file\">📨 Extracting a source language file\u003C\u002Fh2>\u003Cp>Our template is now prepared and ready to be translated. Now we need to define a source language in the \u003Ccode>angular.json\u003C\u002Fcode> configuration file. Open the file and add:\u003C\u002Fp>\u003Cpre>\u003Ccode>...\n\"projects\": {\n  \"angular-i18n-localazy-demo\": {\n    ...\n    \"i18n\": {\n        \"sourceLocale\": \"en\",\n      },\n      ...\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>To ensure that we have a correct setup, a \u003Ccode>sourceLocale\u003C\u002Fcode> value should be equal to Localazy project’s source language code (in our case \u003Cem>“en”\u003C\u002Fem>).\u003C\u002Fp>\u003Cp>Next, we'll use the Angular CLI command to extract the marked text in the template into the source language file. Open a terminal window in the project root directory and run:\u003C\u002Fp>\u003Cpre>\u003Ccode>ng extract-i18n --output-path src\u002Flocale --out-file en.xliff --format=xlf2\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command creates a \u003Ccode>en.xliff\u003C\u002Fcode> file in the \u003Ccode>.\u002Fsrc\u002Flocale\u003C\u002Fcode> directory.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.42.26-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"660\" height=\"148\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.42.26-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.42.26-PM.png 660w\">\u003C\u002Ffigure>\u003Ch2 id=\"-localization-with-localazy\">🪁 Localization with Localazy\u003C\u002Fh2>\u003Cp>Once your app is internationalized, \u003Cstrong>localization (l10n)\u003C\u002Fstrong> comes into play, as this is where you adapt your app for specific audiences by translating the extracted text, adjusting formats, and applying cultural differences. \u003C\u002Fp>\u003Cblockquote>i18n sets up your app for global readiness, while localization makes it feel native to each user’s region\u003C\u002Fblockquote>\u003Cp>This is the part where the real fun begins. In any project, we certainly do not want to handle things that can be automated manually. \u003Cstrong>A manual approach is error-prone, boring, and takes a long time\u003C\u002Fstrong>. And localization is undoubtedly one of the processes that can benefit from automation.\u003C\u002Fp>\u003Ch3 id=\"create-a-new-project\">Create a new project\u003C\u002Fh3>\u003Cp>Go to \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fregister\">Localazy signup\u003C\u002Fa>, join our community by creating an account, then create a new project. We can leave it public so other contributors can freely help with translating our app. Select English as a source language (generally, of course, you can use any other). Also, enable the \u003Cem>Use community translations (\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm\">ShareTM\u003C\u002Fa>)\u003C\u002Fem> option, so some parts of the app can be translated automatically. \u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1874\" height=\"866\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.46.22-PM.png 1874w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The project is successfully created. On the integration filter, we can search and choose Angular.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1906\" height=\"964\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.49.10-PM.png 1906w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"angular-integration-and-content-upload\">Angular integration and content upload\u003C\u002Fh3>\u003Cp>After clicking on the \u003Cem>Angular\u003C\u002Fem> button, we see the integration instructions. \u003C\u002Fp>\u003Cp>Let’s dig into the process a step at a time:\u003C\u002Fp>\u003Col>\u003Cli>Install \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Finstallation\">Localazy CLI\u003C\u002Fa> by running the command in our demo app’s terminal.\u003C\u002Fli>\u003C\u002Fol>\u003Cpre>\u003Ccode>npm install -g @localazy\u002Fcli\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>2.  Afterwards, create a configuration file \u003Ccode>localazy.json\u003C\u002Fcode> in the root folder of your project. Modify the file and include the following snippets:\u003C\u002Fp>\u003Cpre>\u003Ccode>{\n\n  \"writeKey\": \"&lt;your-write-key&gt;\",\n  \"readKey\": \"&lt;your-read-key&gt;\",\n  \n  \"upload\": {  \n    \"type\": \"xliff\",\n    \"files\": \"src\u002Flocale\u002Fen.xliff\",\n    \"features\": [\"parse_plurals_icu\"]\n  },\n  \n  \"download\": {\n    \"files\": \"src\u002Flocale\u002F${lang}.xliff\"\n  }\n  \n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp> The \u003Cstrong>writeKey\u003C\u002Fstrong> and the \u003Cstrong>readKey\u003C\u002Fstrong> can be obtained from the \u003Cem>Access Keys\u003C\u002Fem> tab on the project dashboard. These keys are used to authorize our request.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"843\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-3.57.31-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The \u003Cstrong>upload\u003C\u002Fstrong> section instructs Localazy CLI on how to collect files to be uploaded and, optionally, provides metadata for these files. In our case, the type of file we'll upload to the dashboard is an XLIFF file, which can be found in the \u003Ccode>\u003Cstrong>src\u002Flocale\u003C\u002Fstrong>\u003C\u002Fcode> directory. Because we have defined some plurals string resources in ICU Message Format earlier, we need to add \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fxliff-20-format#icu-plurals\">parsing support\u003C\u002Fa> for ICU plurals within the upload section.\u003C\u002Fp>\u003Cp>The \u003Cstrong>download\u003C\u002Fstrong> section describes how to process translated files and where to write them. In our case, after successful translation, the downloaded translated files will be placed in \u003Cstrong>\u003Ccode>src\u002Flocale\u002F${lang}\u003C\u002Fcode>, \u003C\u002Fstrong>where \u003Cem>lang\u003C\u002Fem> is the language of the translated file.\u003C\u002Fp>\u003Cp>Now it’s finally time to upload our source language phrases to Localazy. Navigate to the project terminal and run the following command:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy upload -s\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Great! We’ve just simulated (\u003Ccode>-s\u003C\u002Fcode> stands for simulate) the upload without actually uploading anything. It is \u003Cstrong>a good practice to test out the configuration\u003C\u002Fstrong> to make sure that nothing unexpected occurs. \u003C\u002Fp>\u003Cp>For example, having an incorrect writeKey or (and) readKey pasted would output lines similar to these:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1146\" height=\"610\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.24.06-PM.png 1146w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>However, with the correct writeKey and readKey, a proper simulation will verify and validate the process. \u003C\u002Fp>\u003Cp>Now let’s upload the phrases for real:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy upload\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>We can either refresh the browser to see the uploaded content or redirect to the project link in the terminal:\u003C\u002Fp>\u003Cpre>\u003Ccode>Verifying...\n\nValidating...\n\nUploading 1 kB...\n\nUpload results: 9 added, 0 updated, 0 deprecated\nUsing 230 out of 800 source keys\n\nYour app on Localazy: https:\u002F\u002Flocalazy.com\u002Fp\u002Fangular-localize-app\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"translation-and-download\">Translation and download\u003C\u002Fh3>\u003Cp>The next step is to add new languages. \u003C\u002Fp>\u003Cp>In our case, we will be translating our content to \u003Cstrong>Czech (cs)\u003C\u002Fstrong> and \u003Cstrong>Spanish(es)\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1280\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-4.53.05-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Using the pluralization rules we mentioned earlier, we can notice that Localazy automatically recognized the language plural rules. When translating to Czech(cs), we can see that we have options for \u003Cem>one, few, and others\u003C\u002Fem>, while for the translation to Spanish(es), we have options for only \u003Cem>one and others \u003C\u002Fem>according to the language plural rules noted above:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1242\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.10.13-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>Czech plurals.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cblockquote>Translating plural rules is possible either through pre-translation with Localazy AI or using human translators. Both suggestions can be activated for the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftiers\u002Fautopilot\">Autopilot plan\u003C\u002Fa> and higher.\u003C\u002Fblockquote>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1129\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.06.33-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>Spanish plurals.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>After the initial automatic translations with \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fmachine-translations\u002F\">your preferred MT engine\u003C\u002Fa> or Localazy AI, we can invite human reviewers as contributors and translators by email and assigning them a specific language to translate:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"528\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-7.14.11-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>We can also place an order for \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fcontinuous-localization-team\">professional human translators and reviewers\u003C\u002Fa> and let Localazy’s team of professional linguists handle it for you. This hybrid process checks and improve these translations, giving us speed and accuracy with less manual effort.\u003C\u002Fp>\u003Cp>Let’s finish translating our app and get back to our Angular project.\u003C\u002Fp>\u003Cp>It’s time to download our translated phrases:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-shell\">localazy download\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command downloads all the freshly added languages and newly accepted phrases. We now have the \u003Cem>cs.xliff \u003C\u002Fem>and \u003Cem>es.xliff\u003C\u002Fem> files in our \u003Cem>locale\u003C\u002Fem> folder containing translated phrases. Let’s build the project!\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.14.07-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"640\" height=\"228\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.14.07-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.14.07-PM.png 640w\">\u003C\u002Ffigure>\u003Ch2 id=\"-build-your-project-in-different-languages\">🗣️ Build your project in different languages\u003C\u002Fh2>\u003Cp>Due to the deployment complexities of i18n and the need to minimize rebuild time, the development server only supports localizing a single locale at a time. For these reasons, we need to update the \u003Cem>angular.json\u003C\u002Fem> project configuration that allows serving more locales at distinct ports at the same time.\u003C\u002Fp>\u003Cp>Firstly, we need to \u003Cstrong>define locales in the build configuration\u003C\u002Fstrong>. Use the \u003Cem>i18n\u003C\u002Fem> project option to define a map of locale identifiers to translation files. Adapt the following code snippet from angular.json:\u003C\u002Fp>\u003Cpre>\u003Ccode>...\n\"projects\": {\n  \"angular-i18n-localazy-demo\": {\n    ...\n    \"i18n\": {\n        \"sourceLocale\": \"en\",\n        \"locales\": {\n           \"cs\": {\n            \"translation\": \"src\u002Flocale\u002Fcs.xliff\"\n          },\n          \"es\": {\n            \"translation\": \"src\u002Flocale\u002Fes.xliff\"\n          }\n        }\n      },\n      ...\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Next, we need to \u003Cstrong>apply specific build options for each locale\u003C\u002Fstrong>. To do that, we can create a custom locale-specific configuration by specifying a single locale, as shown in the following example:\u003C\u002Fp>\u003Cpre>\u003Ccode>...\n\"projects\": {\n  \"angular-i18n-localazy-demo\": {\n    ...\n    \"architect\": {\n      \"build\": {\n        ...\n        \"configurations\":  {\n          ...\n          \"cs\": {\n              \"localize\": [\n                \"cs\"\n              ]\n            },\n            \"es\": {\n              \"localize\": [\n                \"es\"\n              ]\n            },\n            \"en\": {\n              \"localize\": [\n                \"en\"\n              ]\n            }\n        }\n      },\n      \"serve\": {\n        ...\n        \"configurations\": {\n          ...\n          \"en\": {\n              \"buildTarget\": \"angular-i18n-localazy-demo:build:en\",\n              \"port\": 4200\n            },\n            \"cs\": {\n              \"buildTarget\": \"angular-i18n-localazy-demo:build:cs\",\n              \"port\": 4201\n            },\n            \"es\": {\n              \"buildTarget\": \"angular-i18n-localazy-demo:build:es\",\n              \"port\": 4202\n            }\n        }\n      }\n    },\n    ...\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Great! Our locale-specific project configuration is ready. Use three terminal windows pointing into the project root and run a command in each:\u003C\u002Fp>\u003Cpre>\u003Ccode># 1st terminal window\nng serve -c=en\n\n# 2nd terminal window\nng serve -c=cs\n\n# 3rd terminal window\nng serve -c=es\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"819\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.26.03-PM-1.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>The source English UI.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cp>\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"860\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-21-at-5.25.44-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>The resulting Czech UI...\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"880\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw2400\u002F2025\u002F10\u002FScreenshot-2025-10-28-at-6.17.09-PM.png 2400w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>and the translated Spanish UI.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"-conclusion\">✔️ Conclusion\u003C\u002Fh2>\u003Cp>In this article, we demonstrated how to use Localazy and the angular-i18n library to localize an Angular App. Localazy is a powerful tool that makes translating Angular and other applications faster, easier, error-proof, and more fun.\u003C\u002Fp>\u003Cp>Now, you can\u003Cstrong> \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flocalazy\u002Fangular-i18n-example\">download the repository\u003C\u002Fa> with the demo project to explore it\u003C\u002Fstrong> or \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fregister\">start localizing Angular apps\u003C\u002Fa> on your own! If you have any questions, check out the Localazy \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fintegrations\u002Fangular\u002F\">FAQs\u003C\u002Fa> about the framework or \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fcontact\">drop the team a line\u003C\u002Fa> for quick support. 📞\u003C\u002Fp>","89","public","none","2021-04-05T18:39:08.000+02:00","{\"intercomArticleUrl\":\"\"}",[2046],{"id":1951,"name":1952,"slug":1953,"profile_image":1954,"cover_image":10,"bio":2047,"website":2048,"location":2049,"facebook":10,"twitter":2050,"meta_title":10,"meta_description":10,"url":2051},"I am a backend developer that focuses more on JavaScript technologies. I have a flair for writing and I am looking to improve my knowledge as a developer through technical writing.","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmary-okosun-a5195915b","Lagos, Nigeria","@marynoir_","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Fmary-okosun\u002F",[2053,2056,2059,2064,2069,2075,2080,2083,2088,2093,2098,2103,2108],{"id":2054,"name":1960,"slug":1961,"description":1960,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2055},"60a37fc7cf7b6a0001d1f0fa","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fhowto\u002F",{"id":2057,"name":621,"slug":620,"description":621,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2058},"60a37fc7cf7b6a0001d1f10b","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fangular\u002F",{"id":2060,"name":2061,"slug":2062,"description":1970,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2063},"60a37fc7cf7b6a0001d1f162","[DICT] Angular","term-69","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-69\u002F",{"id":2065,"name":2066,"slug":2067,"description":1979,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2068},"60a37fc7cf7b6a0001d1f16c","[DICT] Internationalization (i18n)","term-79","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-79\u002F",{"id":2070,"name":2071,"slug":2072,"description":2073,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2074},"60a37fc7cf7b6a0001d1f11f","[DICT] Localization","term-2","Localization is a process of preparing a product for a particular market.","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-2\u002F",{"id":2076,"name":2077,"slug":2078,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2079},"60fffb486f8ebe0001bd8ddd","[COMSHARE]","comshare","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcomshare\u002F",{"id":2081,"name":1964,"slug":1964,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2082},"60f567ab6f8ebe0001bd80ec","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fi18n\u002F",{"id":2084,"name":2085,"slug":2086,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2087},"61a0daffdf4bcb00010bc50c","[SYNDICATE]","syndicate","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fsyndicate\u002F",{"id":2089,"name":2090,"slug":2091,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2092},"64710a2f047091000193ca3d","[INTERCOM]","intercom","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fintercom\u002F",{"id":2094,"name":2095,"slug":2096,"description":2034,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2097},"6807959863350c0001d59590","[CTA] Explore our developer hub","cta-45","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-45\u002F",{"id":2099,"name":2100,"slug":2101,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2102},"670f4deb34f1ce00011a4443","[AD] Intercom","ad-23","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fad-23\u002F",{"id":2104,"name":2105,"slug":2106,"description":2006,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2107},"67f7fb3563350c0001d58fee","[DICT] ICU Message Format","term-255","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-255\u002F",{"id":2109,"name":2110,"slug":2111,"description":2023,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2112},"60a37fc7cf7b6a0001d1f141","[DICT] Locale","term-36","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-36\u002F",{"id":1951,"name":1952,"slug":1953,"profile_image":1954,"cover_image":10,"bio":2047,"website":2048,"location":2049,"facebook":10,"twitter":2050,"meta_title":10,"meta_description":10,"url":2051},{"id":2054,"name":1960,"slug":1961,"description":1960,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2055},"https:\u002F\u002Fghost.localazy.com\u002Flocalize-angular-app-i18n-l10n-localazy\u002F",{"id":2117,"owner":2118,"created_by":10,"sort":10,"title":1915,"slug":1916,"modified_on":2123,"created_on":2124,"pinned":160,"badge":10,"priority":1824,"main_image":1917,"status":5,"tags":2125,"dictionary":2132,"reading_time":15,"excerpt":2220,"og_title":877,"og_description":877,"og_image":877,"content":2221,"meta_title":877,"meta_description":877,"canonical":877,"cta":2222,"fullGhostPost":2230},"60a37fc7cf7b6a0001d1f1d5",{"id":2119,"first_name":2120,"last_name":877,"slug":2121,"avatar":2122},"60a36fbecf7b6a0001d1e87b","Francisco Melo","francisco-melo","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Ffrancisco-1.png","2023-05-18T11:07:04.000+02:00","2021-05-20T10:23:00.000+02:00",[2126,2127,2128,2131],{"id":451,"created_on":1959,"status":5,"label":352,"slug":1854,"on_index_page":162},{"id":451,"created_on":1959,"status":5,"label":1960,"slug":1961,"on_index_page":160},{"id":451,"created_on":1959,"status":5,"label":2129,"slug":2130,"on_index_page":160},"Automated Localization","automated-localization",{"id":451,"created_on":1959,"status":5,"label":1964,"slug":1964,"on_index_page":162},[2133,2152,2169,2176,2185,2198,2207,2214],{"id":986,"status":5,"owner":1968,"created_on":1977,"title":2134,"excerpt":2135,"content":2136,"slug":2134,"meta_title":10,"meta_description":10,"canonical":10,"related_terms":2137},"i18next","i18next is one of the top open-source internationalization frameworks written in and for JavaScript.","i18next is a powerful open-source internationalization (i18n) framework built for JavaScript. It provides a flexible, JSON-based approach to localization, and it works well with modern tech stacks, including popular frameworks like React, Angular, and Node, as well as platforms such as iOS and Ruby on Rails.\n\n[i18next](https:\u002F\u002Fwww.i18next.com\u002F) supports all key i18n features like plurals, context, and interpolation. It offers a flexible and scalable solution for localizing products across web, mobile, and desktop applications.\n\n### Key points about i18next: 🔧\n\n- **It’s versatile.**  i18next supports a wide range of modern tech stacks, making it adaptable for different environments and platforms.\n- **It’s a comprehensive localization solution.** In addition to standard i18n features, i18next offers advanced capabilities for managing translations and content variations.\n- **It’s flexible and extensible.** Its plugin-based system lets you extend functionality to match your needs, whether it’s through adding middleware, loading external translations, or detecting languages.\n- **It works across platforms.** i18next can be used for web, mobile, and desktop applications, providing consistent localization across different platforms.\n- **Supports multiple environments.** It works well with both server-side (Node.js, Express) and client-side (React, Angular) applications, giving you a consistent translation framework for all environments.\n- **It integrates with Localazy.** i18next integrates smoothly with localization platforms like Localazy, enhancing efficiency in managing multilingual software projects.\n\ni18next simplifies the internationalization process, making it easy to build localized experiences that scale across different platforms and audiences. It can be a great addition to your tech stack if you’re looking to localize your products. \n\n**[See the list of available integrations](\u002Fintegrations)**",[2138,2139,2141,2142,2143,2144,2147,2149],{"id":20,"slug":1854},{"id":2140,"slug":640},75,{"id":1976,"slug":1981},{"id":1250,"slug":606},{"id":1253,"slug":613},{"id":2145,"slug":2146},156,"next.js",{"id":1679,"slug":2148},"ruby-on-rails",{"id":2150,"slug":2151},78,"rails-i18n",{"id":1688,"status":5,"owner":1968,"created_on":1969,"title":2153,"excerpt":2154,"content":2155,"slug":2156,"meta_title":10,"meta_description":2157,"canonical":10,"related_terms":2158},"GNU gettext","Gettext is a library that was built to minimize the work of i18n and l10n. It works by extracting the strings directly from the source files and generating a template file.","`gettext` is simple and flexible package to use for [i18n](\u002Fdictionary\u002Finternationalization) and [l10n](\u002Fdictionary\u002Flocalization) of software with various utilities, [string externalization](\u002Fdictionary\u002Fexternalized-string) and plural support. This package offers to programmers, translators and even users, a well integrated set of tools and extensive [documentation](https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002Fmanual\u002Fgettext.html). \n\n`gettext` is available for usage with various languages ([Python](\u002Fdictionary\u002Fpython), C, PHP, Ruby, [JavaScript](\u002Fjavascript) and many more) and most frameworks already have it with some support. You can check it [here](https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F).\n\nIf you choose this route to prepare your project for internationalization and localization, you'll be in luck because Localazy supports `gettext`.\n\n\n","gnu-gettext","Gettext is a library that was built to minimize the work of i18n and l10n. It works by extracting the strings directly from the source files and generating a template file with externalized strings.",[2159,2160,2162,2164,2165,2166],{"id":20,"slug":1854},{"id":25,"slug":2161},"l10n",{"id":451,"slug":2163},"externalized-string",{"id":2140,"slug":640},{"id":1976,"slug":1981},{"id":2167,"slug":2168},83,"python",{"id":20,"status":5,"owner":1968,"created_on":1991,"title":352,"excerpt":1992,"content":1993,"slug":1854,"meta_title":10,"meta_description":10,"canonical":10,"related_terms":2170},[2171,2172,2173,2174,2175],{"id":20,"slug":1854},{"id":33,"slug":1985},{"id":57,"slug":1989},{"id":291,"slug":1999},{"id":1976,"slug":1981},{"id":33,"status":5,"owner":1968,"created_on":1991,"title":419,"excerpt":2177,"content":2178,"slug":1985,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":2179},"The process of transforming a text into another language.","Translation (t9n) helps people understand a given term in their native language and is a vital part of the [localization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Flocalization) (l10n) process.\n\nThe localization process is often the most tedious one during software developement, as you can’t just introduce a few locale-based rules in your source code.\n\nTranslating texts to another language is hard. You need to know context\u002Fmeaning. You can translate a word quickly, but without context, you can translate it the wrong way. For example, the term “book” can mean “reserve” or “piece of literature” in the Czech language. Both translations are correct, but which one is valid for a button? Context provides the right meaning.\n\n## [ISO definition of the term \"translation\"](https:\u002F\u002Fwww.iso.org\u002Fobp\u002Fui\u002F#iso:std:iso:17100:ed-1:v1:en)\n\nSet of processes to render source language content into target language content in written form.",[2180,2181,2182,2183,2184],{"id":20,"slug":1854},{"id":45,"slug":465},{"id":71,"slug":448},{"id":291,"slug":1999},{"id":1976,"slug":1981},{"id":45,"status":5,"owner":1968,"created_on":2186,"title":2187,"excerpt":2188,"content":2189,"slug":465,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":2190},"2026-05-12T07:09:22.000Z","Translation Memory (TM)","A database of previously translated terms that reduces translation costs and enhances productivity by reusing translations.","[**Translation Memory (TM)**](https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Ftranslation-memory\u002F \"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Ftranslation-memory\u002F\") is an essential feature that helps store and reuse translated terms. By avoiding the duplication of identical or similar texts, a translation memory makes the whole translation process of your project faster and cheaper.\n\nAt Localazy, you can use ShareTM to assist you in providing suggestions based on previously approved translations. [**ShareTM**](https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fshare-tm\u002F \"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fshare-tm\u002F\") allows you to share your translations with the Localazy community and, in return, use translations from other projects. [When you opt into ShareTM](https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm?srsltid=AfmBOooCoA89mWglcxDKkVCWdJzTKliFNo696PoS5VxJJFAD6QY_r2yv \"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm?srsltid=AfmBOooCoA89mWglcxDKkVCWdJzTKliFNo696PoS5VxJJFAD6QY_r2yv\"), your translations contribute to a shared memory pool, and in return, you receive suggestions from this broader database. This collaborative approach can speed up the translation process by leveraging the work already done by others.\n\n### 💪 Main benefits of a TM:\n\n* **Cost reduction**: By reusing existing translations, you save on translation costs and resources.\n* **Consistency**: Ensures consistent terminology and phrasing across all your translations.\n* **Efficiency**: Speeds up the translation process by providing instant suggestions.\n* **Collaboration**: In the case of ShareTM, it promotes a collaborative environment where translations are shared and improved collectively, benefiting all users.",[2191,2194,2196],{"id":2192,"slug":2193},266,"crowdsourcing",{"id":19,"slug":2195},"intm",{"id":4,"slug":2197},"sharetm",{"id":291,"status":5,"owner":1968,"created_on":1969,"title":2199,"excerpt":2200,"content":2201,"slug":1999,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":2202},"Translation Management System (TMS)","A software for translation process automation.","TMS help increase production efficiency by eliminating, automating, and delegating both one-time and repetitive tasks during the translation process. Translation management systems help teams manage multilingual content, assign tasks, track progress, and maintain translation quality. TMS platforms are widely used in localization projects to handle large amounts of text efficiently. \n\nThey support features like translation memories, glossaries, and automated workflows. This makes the translation process faster and more consistent, especially for businesses that need content in multiple languages. [CAT tools](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fcat-tool) are a subtype of TMSs.\n\nTranslation management systems [like Localazy](https:\u002F\u002Flocalazy.com\u002Fterm\u002Ftranslation-management-system) usually consist of two parts. One takes care of workflow management and the second one aids with the translation process using different technologies and methods, such as:\n\n* [Machine translation](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fmachine-translation)\n* [Translation Memory](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ftranslation-memory)\n\nThese systems are ideal for large-scale translation projects, as they provide a vast range of features. \n\n## ☝️ Top features of a TMS:\n\n* Centralizes translation tasks in one platform.\n* Assigns jobs to translators and tracks progress.\n* Uses a translation memory to avoid repeated translations.\n* Ensures consistency with built-in term bases.\n* Helps companies scale content across languages.\n\nWith a TMS, teams can work together smoothly to manage translations. It provides the tools needed to keep projects on track and ensures high-quality results every time. However, they can be pricey for single users or small teams who may benefit from them as well, especially for [quality assurance](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fqa-quality-assurance) processes.",[2203,2204,2206],{"id":45,"slug":465},{"id":15,"slug":2205},"cat-tool",{"id":71,"slug":448},{"id":2150,"status":5,"owner":1968,"created_on":1977,"title":2208,"excerpt":2209,"content":2210,"slug":2151,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":2211},"Rails i18n","An internationalization framework for Ruby that offers a YAML integration.","[Rails i18n](https:\u002F\u002Fguides.rubyonrails.org\u002Fi18n.html) provides a standard way to make Ruby on Rails applications multilingual. It is powered by the Ruby I18n gem, which has been bundled with Rails since version 2.2. It provides a simple but flexible way to make applications multilingual. The framework separates all user-facing text and locale-specific elements (like date, time, and currency formats) from the application code, so translations can be stored in external files and applied dynamically.\n\nBy default, Rails i18n ships with support for English, but can handle any locale once translations are added. It works with pluralization rules, interpolation, and custom formatting to adapt content to different cultural and linguistic needs.\n\n### 🧩 How does Rails i18n work?\n\n* Provides locale-aware formatting for dates, numbers, and currencies.\n* Stores translations in YAML or Ruby files (`config\u002Flocales`).\n* Provides helpers like `t` (translate) and `l` (localize) for views and controllers\n* Supports pluralization rules and variable interpolation.\n* Applies locale-specific formats for dates, numbers, and currencies.\n* Allows defining custom backends for storing translations (e.g., DB or GetText).\n* Lets developers manage and switch locales across requests.\n\nRails i18n makes it easier to design applications that can be internationalized (abstracting text and formats) and localized (providing translations for them). Combined with translation tools or platforms, it allows developers and localization teams to maintain consistent, scalable multilingual Rails projects. This ensures users see content that feels natural and consistent in their own language.",[2212,2213],{"id":1679,"slug":2148},{"id":2014,"slug":2015},{"id":1976,"status":5,"owner":1968,"created_on":1977,"title":1978,"excerpt":1979,"content":1980,"slug":1981,"meta_title":877,"meta_description":877,"canonical":877,"related_terms":2215},[2216,2217,2218,2219],{"id":20,"slug":1854},{"id":33,"slug":1985},{"id":37,"slug":1987},{"id":57,"slug":1989},"The modern software market got this global mainly thanks to multilingual software. Developing software to be multilingual is almost a requirement to ensure its success. Still, it can become a mess and a full-blown headache if not done correctly.","\u003C!--kg-card-begin: html-->\u003Cp>Localazy's objective is to make your life easier and hassle free by automating the localization process of translating your app.\u003C\u002Fp>\n\u003Ch2 id=\"why-internationalize-my-software\" id=\"why-internationalize-my-software\">🤔 Why internationalize my software? \u003Ca class=\"markdownit-header-anchor\" href=\"#why-internationalize-my-software\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Diversifying and expanding your software internationally is undoubtedly something that will add a lot of value to your product\u002Fservice and bring more security to your business.\u003C\u002Fp>\n\u003Cp>⚔️ \u003Cstrong>International Competition:\u003C\u002Fstrong> Instead of limiting yourself to your domestic market, you will be competing with markets from all over the globe 🌍.\u003C\u002Fp>\n\u003Cp>💸 \u003Cstrong>Higher profits:\u003C\u002Fstrong> When you throw yourself into the global market, you will be expanding your product\u002Fservice across borders, allowing more visibility. This, just by itself, can result in higher profits as you’ll be able to win customers from other regions.\u003C\u002Fp>\n\u003Cp>🔀 \u003Cstrong>Differentiation:\u003C\u002Fstrong> Differentiating can be an option that will bring a great advantage; since the international market may require specific changes to the products\u002Fservices to adapt to them better.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Ffc294e20-32ae-487a-8b39-4b336394ffd9\" alt=\"Continents\">\u003C\u002Fp>\n\u003Ch2 id=\"how-to-internationalize-my-software\" id=\"how-to-internationalize-my-software\">❓ How to internationalize my software? \u003Ca class=\"markdownit-header-anchor\" href=\"#how-to-internationalize-my-software\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>To develop multilingual software, we are required to go through three phases: \u003Cstrong>i18n\u003C\u002Fstrong>,\u003Cstrong>l10n\u003C\u002Fstrong> and finally, \u003Cstrong>t9n\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Internationalization is popularly known in the development and technological world as \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization\">i18n\u003C\u002Fa>\u003C\u002Fstrong>,. It is the process of creating or transforming products or services so that they can effortlessly be adapted to specific local languages and cultures. While Localization, commonly known as \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Flocalization\">l10n\u003C\u002Fa>\u003C\u002Fstrong>, is the process of adapting an internationalized product to a particular region or language. Finally, \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ftranslation\">t9n\u003C\u002Fa>\u003C\u002Fstrong> stands for translation.\u003C\u002Fp>\n\u003Ch3 id=\"if-the-project-is-still-to-be-planned\" id=\"if-the-project-is-still-to-be-planned\">If the project is still to be planned \u003Ca class=\"markdownit-header-anchor\" href=\"#if-the-project-is-still-to-be-planned\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When the project planning hasn’t yet begun, design decisions are more manageable. Depending on the framework or library you are planning to use, you will be able to discover suitable \u003Cstrong>i18n libraries\u003C\u002Fstrong> and begin incorporating them from the start.\u003C\u002Fp>\n\u003Cp>Be sure to choose one and carefully follow the steps on how to configure it during the early stages of development. One of the most popular is the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog?search=i18next\">i18next\u003C\u002Fa> library as it is simple to use, and supports frameworks like React, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fangular\">Angular\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fvuejs\">Vue\u003C\u002Fa>, Vanilla \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fjavascript-app-localization-i18next-localazy\">JavaScript\u003C\u002Fa> and NodeJS.\u003C\u002Fp>\n\u003Cp>If you want to know more about the \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog?search=i18n\">i18n\u003C\u002Fa>\u003C\u002Fstrong> process, how to use a library like \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fi18next\">i18next\u003C\u002Fa> or how it works on an empty project, check out our \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fjavascript-app-localization-i18next-localazy#why-localazy-and-i18next\">JavaScript app localization with i18next and Localazy\u003C\u002Fa> article.\u003C\u002Fp>\n\u003Ch3 id=\"if-the-project-is-in-production\" id=\"if-the-project-is-in-production\">If the project is in production \u003Ca class=\"markdownit-header-anchor\" href=\"#if-the-project-is-in-production\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>In case of a project with large amounts of code and which is already in production and with customers using it for a fairly long time , things may become very complicated. Intrusive changes like adding i18n and l10n support to the application will not be easily feasible.\u003C\u002Fp>\n\u003Cp>Nevertheless, if we use libraries like React or frameworks like \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Flocalize-angular-app-i18n-l10n-localazy\">Angular\u003C\u002Fa> and \u003Ca href=\"http:\u002F\u002FASP.NET\">ASP.NET\u003C\u002Fa> Core, our situation will be better. It is recommended to gradually release the application or regional updates so that only a certain percentage of users will be affected in case of any issues.\u003C\u002Fp>\n\u003Cp>For example, you can first publish a project with an instance of translatable messages to handle the default locale. For users, they will not feel any difference, but you will take the first step. You can then add each version incrementally to allow time to adapt.\u003C\u002Fp>\n\u003Cp>Ideally, you should remember to also implement a way to add new translations without redeploying the application so that you can fix any errors without interruption.\u003C\u002Fp>\n\u003Ch3 id=\"legal-reflections\" id=\"legal-reflections\">Legal Reflections \u003Ca class=\"markdownit-header-anchor\" href=\"#legal-reflections\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When publishing apps in other markets, you need to ensure that your application complies with local laws and regulations. If it does, you may have to change some parts or aspects of it to adapt to different markets. For example, gambling apps are modified for different markets and areas in terms of payment systems, in-game currency, and randomized gaming elements to comply with the gambling laws of each market.\u003C\u002Fp>\n\u003Cp>You also need to remember that legal issues may emerge depending upon how your application is really being utilized and not by how you designed it in the first place. This may imply that you will not have the option to deliver your application to specific nations. For instance, betting is illicit in nations like Korea and Taiwan. So releasing a betting game there would be illicit, regardless of how diligently you attempt to change it.\u003C\u002Fp>\n\u003Cp>Data usage is also important to keep in mind as different countries have different laws in terms of data storage, sharing, security, and more. The difference between these laws and regulations lies in the need to obtain permission for user data, what data can be obtained and how to use it, including personal information (such as name, email address, social security number, etc.) and any user activity or behaviour. This applies especially for countries in the EU where GDPR (General Data Protection Regulation) applies.\u003C\u002Fp>\n\u003Ch3 id=\"keeping-content-separated\" id=\"keeping-content-separated\">Keeping content separated \u003Ca class=\"markdownit-header-anchor\" href=\"#keeping-content-separated\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The most important thing that you need to do regarding the project internationalization is separating the content from the code.\u003C\u002Fp>\n\u003Cp>In order to create different versions of the content and different product flavours, nothing that the user will see in the application can be static. The version will be dynamically loaded and adjusted according to each locale.\u003C\u002Fp>\n\u003Cp>You need to collect the content and store it in a repository so that you can easily create different versions of that content for any new locales you might want to add and load it into your project without influencing the code. This will allow the development teams to develop multilingual applications, while translators or team members responsible for the \u003Cstrong>localization process\u003C\u002Fstrong> can work separately, making it easier for both sides to work simultaneously.\u003C\u002Fp>\n\u003Cp>The content is:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Media(image, video, sound) 📷\u003C\u002Fli>\n\u003Cli>Text 📜\u003C\u002Fli>\n\u003Cli>Date Format ⌛\u003C\u002Fli>\n\u003Cli>Numbers 🔢\u003C\u002Fli>\n\u003Cli>Currency 💰\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"externalizing-strings\" id=\"externalizing-strings\">Externalizing Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#externalizing-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Text is without a doubt the most common way to communicate with the user of an app and so we will cover the importance of strings. First off, not all text needs to be external, only the one that the user will see. There is a lot of text that will always stay within the app itself for programming purposes, therefore it doesn’t need to be extracted or externalized. Text should also use UTF-8 encoding as it is capable of encoding all 1,112,064 valid character code points in Unicode, giving you the ability of supporting languages with different alphabets.\u003C\u002Fp>\n\u003Cp>Externalizing the strings the users will see from the get-go, is a crucial step of i18n as it will save you huge amounts of time and a headache opposed to simply hardcoding all the project’s strings inside the project itself.\u003C\u002Fp>\n\u003Cp>With all of that said, you need to write all the strings that are relevant to translation and each one of them will have a key assigned for location identification. All of them will be written in an external source, e.g. a text file. Or in case of the previously mentioned \u003Ccode>i18next\u003C\u002Fcode> library, you will use a \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fjson\">JSON\u003C\u002Fa> file.\u003C\u002Fp>\n\u003Cp>If your project is organized by a framework, this file should be created inside a \u003Ccode>locale\u003C\u002Fcode>, \u003Ccode>lang\u003C\u002Fcode> or similar folder, and named by the default language you will use, if your project’s source language is English, then the filename will be \u003Ccode>en.json\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"extracting-the-strings\" id=\"extracting-the-strings\">Extracting the Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#extracting-the-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>If you’ve started the project without externalizing the strings, there are a few options to help with the hassle, one of them being the \u003Ccode>GNU gettext\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fgnu-gettext\">gettext\u003C\u002Fa>\u003C\u002Fstrong> is a library that was built to minimize the \u003Ccode>i18n\u003C\u002Fcode> and \u003Ccode>l10n\u003C\u002Fcode> work. It works by extracting the strings directly from the source files and generating a template file with the strings that are going to be translated. It’s simple but flexible to use and it has plural support.\u003C\u002Fp>\n\u003Cp>It is available for various languages (\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fpython\">Python\u003C\u002Fa>, C, PHP, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Frails-i18n\">Ruby\u003C\u002Fa>, JavaScript and many more) and most frameworks already have it with some support. You can check it \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\">here\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>If you choose this route, you’ll be in luck because Localazy supports \u003Ccode>gettext\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Alternatives to \u003Ccode>gettext\u003C\u002Fcode> are:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>OASIS \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fxliff\">XLIFF\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GNU gettext po\u002Fmo files\u003C\u002Fli>\n\u003Cli>POSIX catalogs\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fqt\">Qt ts\u002Ftm files\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fproperties\">Java properties\u003C\u002Fa>,\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fresx\">Windows resources\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"translating-the-strings\" id=\"translating-the-strings\">Translating the Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#translating-the-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ch4 id=\"use-localazy-or-find-translators\">Use Localazy or find Translators\u003C\u002Fh4>\n\u003Cp>Having the default language file is a big step and taking in all the topics we covered so far is a challenge by itself, but the real legwork is to translate all the strings. Sure, if you have a project with a few dozens of strings, you might not be too bothered to translate it yourself or pay translators to translate them all. The real problem is when we have massive projects with hundreds, if not thousands of strings to translate. It will soon become messy, costly and painful to manage.\u003C\u002Fp>\n\u003Cp>The good news is that Localazy allows you to go through the \u003Ccode>l10n\u003C\u002Fcode> process in a much more affordable, smoother and hassle free way.\u003C\u002Fp>\n\u003Cp>Localazy is a developer-focused \u003Cstrong>localization management platform\u003C\u002Fstrong> that supports a wide variety of \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fintegrations\">frameworks and an even more comprehensive range of formats\u003C\u002Fa> through its \u003Ca href=\"\u002Fdocs\u002Fcli\u002Fthe-basics\">CLI\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fq0uEltq02e0\" title=\"Automated SW localization using Localazy CLI\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\n\u003Ch4 id=\"localazys-best-features\">Localazy’s best features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>A \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fis-there-ai-behind-localazy\">pro-active review process\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Highly accurate translation memory supported by \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm\">community-shared translations\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>A simple, crystal clear UI that is not bloated with rarely used options.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FrYhwKIYQSuw\" title=\"Automated SW localization using Localazy CLI\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe> \n\n\u003Ch4 id=\"hire-the-virtual-translator-for-continuous-translation\">Hire the Virtual Translator for Continuous translation\u003C\u002Fh4>\n\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FQbsSJKc2N84\" title=\"Automated SW localization using Localazy CLI\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\n\u003Ch3 id=\"managing-the-external-strings\" id=\"managing-the-external-strings\">Managing the external Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#managing-the-external-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>If you choose to do this process manually or if you have it automatically, in the mentioned languages folder you will have to have files with different naming (names that will depend on the language we will have translated inside the file) and with the same string keys as the original.\u003C\u002Fp>\n\u003Cp>Example of \u003Ccode>en.json\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n{\n\n  &quot;hello_world&quot;: &quot;Hello World!&quot;,\n\n  &quot;like_ice_cream&quot;: &quot;I like ice cream&quot;;,\n\n  &quot;bread&quot;: &quot;Bread&quot;\n\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Different language file, for example, Polish in \u003Ccode>pl.json\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n{\n\n  &quot;hello_world&quot;: &quot;Witaj świecie!&quot;,\n\n  &quot;like_ice_cream&quot;: &quot;Lubię lody&quot;;,\n\n  &quot;bread&quot;: &quot;Chleb&quot;\n\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The file extensions used here are just for demonstration purposes as they can be different, depending on the programming language or framework used.\u003C\u002Fp>\n\u003Ch2 id=\"challenges-of-i18n-and-final-considerations\" id=\"challenges-of-i18n-and-final-considerations\">🏆 Challenges of i18n and Final Considerations \u003Ca class=\"markdownit-header-anchor\" href=\"#challenges-of-i18n-and-final-considerations\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"plurals-and-string-interpolation\" id=\"plurals-and-string-interpolation\">Plurals and String Interpolation \u003Ca class=\"markdownit-header-anchor\" href=\"#plurals-and-string-interpolation\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When we use numbers in the text, we tend to think there are only two cases, whether it is singular or plural. Still, different languages ​​have different numbering systems and different plural forms. Some languages ​​have singular, double, and plural nouns, while others have more specific rules about few or many nouns, and even the definitions of “rarely” and &quot;many’’ are different. Since this is a common problem, most systems today support localization plural forms between different languages. Depending on the languages you want to add, you can check Unicode’s \u003Ca href=\"https:\u002F\u002Fwww.unicode.org\u002Fcldr\u002Fcldr-aux\u002Fcharts\u002F29\u002Fsupplemental\u002Flanguage_plural_rules.html\">Language Plural Rules\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>If we need to use variables inside the strings, we can use \u003Cstrong>string interpolation\u003C\u002Fstrong> as it allows us to insert variables directly into a string without concatenating multiple strings together.\u003C\u002Fp>\n\u003Cp>This allows translators to view the complete sentence and modify it as needed, thereby changing the order of any strings or variables accordingly. To do this, we can use placeholders to define the variables. The variables can also change the plural forms. As an example of placeholder usage we will demonstrate a placeholder in PHP’s Laravel framework:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n&lt;?php\n\nreturn [\n\n  'voted'=&gt;&quot;The city most voted by the users is :city&quot;,\n\n  'name'=&gt;&quot;My name is :name&quot;,\n\n  'carStatus'=&gt;&quot;There is :carNum car blocking the road | There are :carNum cars blocking the road&quot;\n\n]\n\n ?&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The same file with the translated strings to Portuguese:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n&lt;?php\n\nreturn [\n\n  'voted_city'=&gt;&quot;A cidade mais votada pelos utilizadores foi :city&quot;,\n\n  'name'=&gt;&quot;O meu nome é :nome&quot;\n\n  'carStatus'=&gt;&quot;Há :carNum carro a bloquear a estrada | Há :carNum carros a bloquear a estrada&quot;\n\n]\n\n ?&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Using the prefix \u003Ccode>:\u003C\u002Fcode>, we are then able to assign the variables: \u003Cstrong>city\u003C\u002Fstrong> and \u003Cstrong>name\u003C\u002Fstrong>. With the \u003Ccode>|\u003C\u002Fcode> character we are able to distinguish between singular and plural.\u003C\u002Fp>\n\u003Cp>This example is simply for demonstration purposes as placeholders and plurals \u003Cstrong>differ\u003C\u002Fstrong> depending on which language\u002Fframework\u002Flibrary you are working with. Plurals can be an extreme challenge if we are translating a language with many forms, but \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Ftranslating-plurals\">Localazy supports all CLDR plural rules\u003C\u002Fa> internally and generates them correctly for all languages defined there.\u003C\u002Fp>\n\u003Cp>In some areas we want to internationalize our product to, we might need to implement \u003Cstrong>Right-to-Left\u003C\u002Fstrong>  languages support.\u003C\u002Fp>\n\u003Cp>You can check some examples of \u003Cstrong>plurals\u003C\u002Fstrong> and \u003Cstrong>string interpolation\u003C\u002Fstrong> on our \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Flaravel-multilingual-i18n-php-localazy\">How to build a \u003Cstrong>multilingual PHP\u003C\u002Fstrong> app with Localazy and Laravel\u003C\u002Fa> article.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"\u002Fblog\u002Fattract-more-contributors-translate-your-app\">How to attract more contributors to translate your app?\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2 id=\"closing-words\" id=\"closing-words\">✔️ Closing Words \u003Ca class=\"markdownit-header-anchor\" href=\"#closing-words\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>As we could see by now, developing multilingual applications is not that easy as there is quite a lot to consider, plan and develop.\u003C\u002Fp>\n\u003Cp>After all we’ve covered, it is recommended to plan a project to be internationalized right from the beginning and depending on the product flavours and versions we want to add, we might need to expand the external content besides just the strings for the text. Many of the concepts we talked about here and given examples have different methods of implementation, depending on the language\u002Fframework\u002Flibrary we are using, it is wise to read their documentation to avoid compatibility issues. The \u003Ccode>i18n\u003C\u002Fcode> path is not an easy one to take but at least you can count on Localazy to make part of it effortless.\u003C\u002Fp>\n\u003C!--kg-card-end: html-->",{"id":19,"status":5,"created_on":2223,"modified_on":2224,"icon":2225,"header":2226,"description":2227,"button_label":2228,"link":2229},"2022-03-17T12:23:03.000Z","2023-01-19T11:50:04.000Z","member","Automate your localization today! ⚙️","Translate your project in a breeze, utilize the advanced features and fully automate your localization process with Localazy! ","Join Localazy","register",{"slug":1916,"id":2117,"uuid":2231,"title":1915,"html":2232,"comment_id":2233,"feature_image":1917,"featured":160,"visibility":2041,"email_recipient_filter":2042,"created_at":2234,"updated_at":2123,"published_at":2124,"custom_excerpt":2220,"codeinjection_head":2235,"codeinjection_foot":10,"custom_template":2233,"canonical_url":10,"authors":2236,"tags":2240,"primary_author":2288,"primary_tag":2289,"url":2290,"excerpt":2220,"reading_time":53,"access":162,"send_email_when_published":160,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"email_subject":10,"frontmatter":10,"dictionary":2132,"cta":2222,"plainTags":2125},"7cef6851-c751-409b-a820-0fee88b731da","\u003C!--kg-card-begin: html-->\u003Cp>Localazy's objective is to make your life easier and hassle free by automating the localization process of translating your app.\u003C\u002Fp>\n\u003Ch2 id=\"why-internationalize-my-software\" id=\"why-internationalize-my-software\">🤔 Why internationalize my software? \u003Ca class=\"markdownit-header-anchor\" href=\"#why-internationalize-my-software\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Diversifying and expanding your software internationally is undoubtedly something that will add a lot of value to your product\u002Fservice and bring more security to your business.\u003C\u002Fp>\n\u003Cp>⚔️ \u003Cstrong>International Competition:\u003C\u002Fstrong> Instead of limiting yourself to your domestic market, you will be competing with markets from all over the globe 🌍.\u003C\u002Fp>\n\u003Cp>💸 \u003Cstrong>Higher profits:\u003C\u002Fstrong> When you throw yourself into the global market, you will be expanding your product\u002Fservice across borders, allowing more visibility. This, just by itself, can result in higher profits as you’ll be able to win customers from other regions.\u003C\u002Fp>\n\u003Cp>🔀 \u003Cstrong>Differentiation:\u003C\u002Fstrong> Differentiating can be an option that will bring a great advantage; since the international market may require specific changes to the products\u002Fservices to adapt to them better.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fdirectus9.localazy.com\u002Fassets\u002Ffc294e20-32ae-487a-8b39-4b336394ffd9\" alt=\"Continents\">\u003C\u002Fp>\n\u003Ch2 id=\"how-to-internationalize-my-software\" id=\"how-to-internationalize-my-software\">❓ How to internationalize my software? \u003Ca class=\"markdownit-header-anchor\" href=\"#how-to-internationalize-my-software\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>To develop multilingual software, we are required to go through three phases: \u003Cstrong>i18n\u003C\u002Fstrong>,\u003Cstrong>l10n\u003C\u002Fstrong> and finally, \u003Cstrong>t9n\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Internationalization is popularly known in the development and technological world as \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization\">i18n\u003C\u002Fa>\u003C\u002Fstrong>,. It is the process of creating or transforming products or services so that they can effortlessly be adapted to specific local languages and cultures. While Localization, commonly known as \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Flocalization\">l10n\u003C\u002Fa>\u003C\u002Fstrong>, is the process of adapting an internationalized product to a particular region or language. Finally, \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ftranslation\">t9n\u003C\u002Fa>\u003C\u002Fstrong> stands for translation.\u003C\u002Fp>\n\u003Ch3 id=\"if-the-project-is-still-to-be-planned\" id=\"if-the-project-is-still-to-be-planned\">If the project is still to be planned \u003Ca class=\"markdownit-header-anchor\" href=\"#if-the-project-is-still-to-be-planned\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When the project planning hasn’t yet begun, design decisions are more manageable. Depending on the framework or library you are planning to use, you will be able to discover suitable \u003Cstrong>i18n libraries\u003C\u002Fstrong> and begin incorporating them from the start.\u003C\u002Fp>\n\u003Cp>Be sure to choose one and carefully follow the steps on how to configure it during the early stages of development. One of the most popular is the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog?search=i18next\">i18next\u003C\u002Fa> library as it is simple to use, and supports frameworks like React, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fangular\">Angular\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fvuejs\">Vue\u003C\u002Fa>, Vanilla \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fjavascript-app-localization-i18next-localazy\">JavaScript\u003C\u002Fa> and NodeJS.\u003C\u002Fp>\n\u003Cp>If you want to know more about the \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog?search=i18n\">i18n\u003C\u002Fa>\u003C\u002Fstrong> process, how to use a library like \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fi18next\">i18next\u003C\u002Fa> or how it works on an empty project, check out our \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fjavascript-app-localization-i18next-localazy#why-localazy-and-i18next\">JavaScript app localization with i18next and Localazy\u003C\u002Fa> article.\u003C\u002Fp>\n\u003Ch3 id=\"if-the-project-is-in-production\" id=\"if-the-project-is-in-production\">If the project is in production \u003Ca class=\"markdownit-header-anchor\" href=\"#if-the-project-is-in-production\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>In case of a project with large amounts of code and which is already in production and with customers using it for a fairly long time , things may become very complicated. Intrusive changes like adding i18n and l10n support to the application will not be easily feasible.\u003C\u002Fp>\n\u003Cp>Nevertheless, if we use libraries like React or frameworks like \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Flocalize-angular-app-i18n-l10n-localazy\">Angular\u003C\u002Fa> and \u003Ca href=\"http:\u002F\u002FASP.NET\">ASP.NET\u003C\u002Fa> Core, our situation will be better. It is recommended to gradually release the application or regional updates so that only a certain percentage of users will be affected in case of any issues.\u003C\u002Fp>\n\u003Cp>For example, you can first publish a project with an instance of translatable messages to handle the default locale. For users, they will not feel any difference, but you will take the first step. You can then add each version incrementally to allow time to adapt.\u003C\u002Fp>\n\u003Cp>Ideally, you should remember to also implement a way to add new translations without redeploying the application so that you can fix any errors without interruption.\u003C\u002Fp>\n\u003Ch3 id=\"legal-reflections\" id=\"legal-reflections\">Legal Reflections \u003Ca class=\"markdownit-header-anchor\" href=\"#legal-reflections\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When publishing apps in other markets, you need to ensure that your application complies with local laws and regulations. If it does, you may have to change some parts or aspects of it to adapt to different markets. For example, gambling apps are modified for different markets and areas in terms of payment systems, in-game currency, and randomized gaming elements to comply with the gambling laws of each market.\u003C\u002Fp>\n\u003Cp>You also need to remember that legal issues may emerge depending upon how your application is really being utilized and not by how you designed it in the first place. This may imply that you will not have the option to deliver your application to specific nations. For instance, betting is illicit in nations like Korea and Taiwan. So releasing a betting game there would be illicit, regardless of how diligently you attempt to change it.\u003C\u002Fp>\n\u003Cp>Data usage is also important to keep in mind as different countries have different laws in terms of data storage, sharing, security, and more. The difference between these laws and regulations lies in the need to obtain permission for user data, what data can be obtained and how to use it, including personal information (such as name, email address, social security number, etc.) and any user activity or behaviour. This applies especially for countries in the EU where GDPR (General Data Protection Regulation) applies.\u003C\u002Fp>\n\u003Ch3 id=\"keeping-content-separated\" id=\"keeping-content-separated\">Keeping content separated \u003Ca class=\"markdownit-header-anchor\" href=\"#keeping-content-separated\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The most important thing that you need to do regarding the project internationalization is separating the content from the code.\u003C\u002Fp>\n\u003Cp>In order to create different versions of the content and different product flavours, nothing that the user will see in the application can be static. The version will be dynamically loaded and adjusted according to each locale.\u003C\u002Fp>\n\u003Cp>You need to collect the content and store it in a repository so that you can easily create different versions of that content for any new locales you might want to add and load it into your project without influencing the code. This will allow the development teams to develop multilingual applications, while translators or team members responsible for the \u003Cstrong>localization process\u003C\u002Fstrong> can work separately, making it easier for both sides to work simultaneously.\u003C\u002Fp>\n\u003Cp>The content is:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Media(image, video, sound) 📷\u003C\u002Fli>\n\u003Cli>Text 📜\u003C\u002Fli>\n\u003Cli>Date Format ⌛\u003C\u002Fli>\n\u003Cli>Numbers 🔢\u003C\u002Fli>\n\u003Cli>Currency 💰\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"externalizing-strings\" id=\"externalizing-strings\">Externalizing Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#externalizing-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Text is without a doubt the most common way to communicate with the user of an app and so we will cover the importance of strings. First off, not all text needs to be external, only the one that the user will see. There is a lot of text that will always stay within the app itself for programming purposes, therefore it doesn’t need to be extracted or externalized. Text should also use UTF-8 encoding as it is capable of encoding all 1,112,064 valid character code points in Unicode, giving you the ability of supporting languages with different alphabets.\u003C\u002Fp>\n\u003Cp>Externalizing the strings the users will see from the get-go, is a crucial step of i18n as it will save you huge amounts of time and a headache opposed to simply hardcoding all the project’s strings inside the project itself.\u003C\u002Fp>\n\u003Cp>With all of that said, you need to write all the strings that are relevant to translation and each one of them will have a key assigned for location identification. All of them will be written in an external source, e.g. a text file. Or in case of the previously mentioned \u003Ccode>i18next\u003C\u002Fcode> library, you will use a \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fjson\">JSON\u003C\u002Fa> file.\u003C\u002Fp>\n\u003Cp>If your project is organized by a framework, this file should be created inside a \u003Ccode>locale\u003C\u002Fcode>, \u003Ccode>lang\u003C\u002Fcode> or similar folder, and named by the default language you will use, if your project’s source language is English, then the filename will be \u003Ccode>en.json\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"extracting-the-strings\" id=\"extracting-the-strings\">Extracting the Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#extracting-the-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>If you’ve started the project without externalizing the strings, there are a few options to help with the hassle, one of them being the \u003Ccode>GNU gettext\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fgnu-gettext\">gettext\u003C\u002Fa>\u003C\u002Fstrong> is a library that was built to minimize the \u003Ccode>i18n\u003C\u002Fcode> and \u003Ccode>l10n\u003C\u002Fcode> work. It works by extracting the strings directly from the source files and generating a template file with the strings that are going to be translated. It’s simple but flexible to use and it has plural support.\u003C\u002Fp>\n\u003Cp>It is available for various languages (\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fpython\">Python\u003C\u002Fa>, C, PHP, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Frails-i18n\">Ruby\u003C\u002Fa>, JavaScript and many more) and most frameworks already have it with some support. You can check it \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\">here\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>If you choose this route, you’ll be in luck because Localazy supports \u003Ccode>gettext\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Alternatives to \u003Ccode>gettext\u003C\u002Fcode> are:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>OASIS \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fxliff\">XLIFF\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GNU gettext po\u002Fmo files\u003C\u002Fli>\n\u003Cli>POSIX catalogs\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fqt\">Qt ts\u002Ftm files\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fproperties\">Java properties\u003C\u002Fa>,\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fresx\">Windows resources\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"translating-the-strings\" id=\"translating-the-strings\">Translating the Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#translating-the-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ch4 id=\"use-localazy-or-find-translators\">Use Localazy or find Translators\u003C\u002Fh4>\n\u003Cp>Having the default language file is a big step and taking in all the topics we covered so far is a challenge by itself, but the real legwork is to translate all the strings. Sure, if you have a project with a few dozens of strings, you might not be too bothered to translate it yourself or pay translators to translate them all. The real problem is when we have massive projects with hundreds, if not thousands of strings to translate. It will soon become messy, costly and painful to manage.\u003C\u002Fp>\n\u003Cp>The good news is that Localazy allows you to go through the \u003Ccode>l10n\u003C\u002Fcode> process in a much more affordable, smoother and hassle free way.\u003C\u002Fp>\n\u003Cp>Localazy is a developer-focused \u003Cstrong>localization management platform\u003C\u002Fstrong> that supports a wide variety of \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fintegrations\">frameworks and an even more comprehensive range of formats\u003C\u002Fa> through its \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">CLI\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fq0uEltq02e0\" title=\"Automated SW localization using Localazy CLI\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\n\u003Ch4 id=\"localazys-best-features\">Localazy’s best features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>A \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fis-there-ai-behind-localazy\">pro-active review process\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Highly accurate translation memory supported by \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm\">community-shared translations\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>A simple, crystal clear UI that is not bloated with rarely used options.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FrYhwKIYQSuw\" title=\"Automated SW localization using Localazy CLI\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe> \n\n\u003Ch4 id=\"hire-the-virtual-translator-for-continuous-translation\">Hire the Virtual Translator for Continuous translation\u003C\u002Fh4>\n\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FQbsSJKc2N84\" title=\"Automated SW localization using Localazy CLI\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\n\u003Ch3 id=\"managing-the-external-strings\" id=\"managing-the-external-strings\">Managing the external Strings \u003Ca class=\"markdownit-header-anchor\" href=\"#managing-the-external-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>If you choose to do this process manually or if you have it automatically, in the mentioned languages folder you will have to have files with different naming (names that will depend on the language we will have translated inside the file) and with the same string keys as the original.\u003C\u002Fp>\n\u003Cp>Example of \u003Ccode>en.json\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n{\n\n  &quot;hello_world&quot;: &quot;Hello World!&quot;,\n\n  &quot;like_ice_cream&quot;: &quot;I like ice cream&quot;;,\n\n  &quot;bread&quot;: &quot;Bread&quot;\n\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Different language file, for example, Polish in \u003Ccode>pl.json\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n{\n\n  &quot;hello_world&quot;: &quot;Witaj świecie!&quot;,\n\n  &quot;like_ice_cream&quot;: &quot;Lubię lody&quot;;,\n\n  &quot;bread&quot;: &quot;Chleb&quot;\n\n}\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The file extensions used here are just for demonstration purposes as they can be different, depending on the programming language or framework used.\u003C\u002Fp>\n\u003Ch2 id=\"challenges-of-i18n-and-final-considerations\" id=\"challenges-of-i18n-and-final-considerations\">🏆 Challenges of i18n and Final Considerations \u003Ca class=\"markdownit-header-anchor\" href=\"#challenges-of-i18n-and-final-considerations\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"plurals-and-string-interpolation\" id=\"plurals-and-string-interpolation\">Plurals and String Interpolation \u003Ca class=\"markdownit-header-anchor\" href=\"#plurals-and-string-interpolation\">🔗\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When we use numbers in the text, we tend to think there are only two cases, whether it is singular or plural. Still, different languages ​​have different numbering systems and different plural forms. Some languages ​​have singular, double, and plural nouns, while others have more specific rules about few or many nouns, and even the definitions of “rarely” and &quot;many’’ are different. Since this is a common problem, most systems today support localization plural forms between different languages. Depending on the languages you want to add, you can check Unicode’s \u003Ca href=\"https:\u002F\u002Fwww.unicode.org\u002Fcldr\u002Fcldr-aux\u002Fcharts\u002F29\u002Fsupplemental\u002Flanguage_plural_rules.html\">Language Plural Rules\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>If we need to use variables inside the strings, we can use \u003Cstrong>string interpolation\u003C\u002Fstrong> as it allows us to insert variables directly into a string without concatenating multiple strings together.\u003C\u002Fp>\n\u003Cp>This allows translators to view the complete sentence and modify it as needed, thereby changing the order of any strings or variables accordingly. To do this, we can use placeholders to define the variables. The variables can also change the plural forms. As an example of placeholder usage we will demonstrate a placeholder in PHP’s Laravel framework:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n&lt;?php\n\nreturn [\n\n  'voted'=&gt;&quot;The city most voted by the users is :city&quot;,\n\n  'name'=&gt;&quot;My name is :name&quot;,\n\n  'carStatus'=&gt;&quot;There is :carNum car blocking the road | There are :carNum cars blocking the road&quot;\n\n]\n\n ?&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The same file with the translated strings to Portuguese:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\n&lt;?php\n\nreturn [\n\n  'voted_city'=&gt;&quot;A cidade mais votada pelos utilizadores foi :city&quot;,\n\n  'name'=&gt;&quot;O meu nome é :nome&quot;\n\n  'carStatus'=&gt;&quot;Há :carNum carro a bloquear a estrada | Há :carNum carros a bloquear a estrada&quot;\n\n]\n\n ?&gt;\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Using the prefix \u003Ccode>:\u003C\u002Fcode>, we are then able to assign the variables: \u003Cstrong>city\u003C\u002Fstrong> and \u003Cstrong>name\u003C\u002Fstrong>. With the \u003Ccode>|\u003C\u002Fcode> character we are able to distinguish between singular and plural.\u003C\u002Fp>\n\u003Cp>This example is simply for demonstration purposes as placeholders and plurals \u003Cstrong>differ\u003C\u002Fstrong> depending on which language\u002Fframework\u002Flibrary you are working with. Plurals can be an extreme challenge if we are translating a language with many forms, but \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Ftranslating-plurals\">Localazy supports all CLDR plural rules\u003C\u002Fa> internally and generates them correctly for all languages defined there.\u003C\u002Fp>\n\u003Cp>In some areas we want to internationalize our product to, we might need to implement \u003Cstrong>Right-to-Left\u003C\u002Fstrong>  languages support.\u003C\u002Fp>\n\u003Cp>You can check some examples of \u003Cstrong>plurals\u003C\u002Fstrong> and \u003Cstrong>string interpolation\u003C\u002Fstrong> on our \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Flaravel-multilingual-i18n-php-localazy\">How to build a \u003Cstrong>multilingual PHP\u003C\u002Fstrong> app with Localazy and Laravel\u003C\u002Fa> article.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fblog\u002Fattract-more-contributors-translate-your-app\">How to attract more contributors to translate your app?\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2 id=\"closing-words\" id=\"closing-words\">✔️ Closing Words \u003Ca class=\"markdownit-header-anchor\" href=\"#closing-words\">🔗\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>As we could see by now, developing multilingual applications is not that easy as there is quite a lot to consider, plan and develop.\u003C\u002Fp>\n\u003Cp>After all we’ve covered, it is recommended to plan a project to be internationalized right from the beginning and depending on the product flavours and versions we want to add, we might need to expand the external content besides just the strings for the text. Many of the concepts we talked about here and given examples have different methods of implementation, depending on the language\u002Fframework\u002Flibrary we are using, it is wise to read their documentation to avoid compatibility issues. The \u003Ccode>i18n\u003C\u002Fcode> path is not an easy one to take but at least you can count on Localazy to make part of it effortless.\u003C\u002Fp>\n\u003C!--kg-card-end: html-->","104","2021-05-11T10:23:11.000+02:00","https:\u002F\u002Fintercom.help\u002Flocalazy-test\u002Fen\u002Farticles\u002F7917111-guide-how-to-prepare-your-application-for-i18n-l10n",[2237],{"id":2119,"name":2120,"slug":2121,"profile_image":2122,"cover_image":10,"bio":10,"website":10,"location":2238,"facebook":10,"twitter":10,"meta_title":10,"meta_description":10,"url":2239},"Munich, Germany","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Ffrancisco-melo\u002F",[2241,2247,2250,2251,2256,2261,2262,2267,2272,2277,2282,2283,2286,2287],{"id":2242,"name":2243,"slug":2244,"description":2245,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2246},"60a37fc7cf7b6a0001d1f11a","[CTA] Automate your localization today! ⚙️","cta-12","Use all core localization features for free and automate your localization process with Localazy!","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-12\u002F",{"id":2248,"name":352,"slug":1854,"description":352,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2249},"60a37fc7cf7b6a0001d1f0f9","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Flocalization\u002F",{"id":2054,"name":1960,"slug":1961,"description":1960,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2055},{"id":2252,"name":2253,"slug":2254,"description":2135,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2255},"60a37fc7cf7b6a0001d1f175","[DICT] i18next","term-88","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-88\u002F",{"id":2257,"name":2258,"slug":2259,"description":2154,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2260},"60a37fc7cf7b6a0001d1f176","[DICT] GNU gettext","term-89","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-89\u002F",{"id":2070,"name":2071,"slug":2072,"description":2073,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2074},{"id":2263,"name":2264,"slug":2265,"description":2177,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2266},"60a37fc7cf7b6a0001d1f121","[DICT] Translation","term-4","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-4\u002F",{"id":2268,"name":2269,"slug":2270,"description":2188,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2271},"60a37fc7cf7b6a0001d1f124","[DICT] Translation Memory (TM)","term-7","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-7\u002F",{"id":2273,"name":2274,"slug":2275,"description":2200,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2276},"60a37fc7cf7b6a0001d1f144","[DICT] Translation Management System (TMS)","term-39","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-39\u002F",{"id":2278,"name":2279,"slug":2280,"description":2209,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2281},"60a37fc7cf7b6a0001d1f16b","[DICT] Rails i18n","term-78","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-78\u002F",{"id":2065,"name":2066,"slug":2067,"description":1979,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2068},{"id":2284,"name":2129,"slug":2130,"description":2129,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2285},"60a37fc7cf7b6a0001d1f101","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fautomated-localization\u002F",{"id":2081,"name":1964,"slug":1964,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2082},{"id":2084,"name":2085,"slug":2086,"description":10,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2087},{"id":2119,"name":2120,"slug":2121,"profile_image":2122,"cover_image":10,"bio":10,"website":10,"location":2238,"facebook":10,"twitter":10,"meta_title":10,"meta_description":10,"url":2239},{"id":2242,"name":2243,"slug":2244,"description":2245,"feature_image":10,"visibility":2041,"og_image":10,"og_title":10,"og_description":10,"twitter_image":10,"twitter_title":10,"twitter_description":10,"meta_title":10,"meta_description":10,"codeinjection_head":10,"codeinjection_foot":10,"canonical_url":10,"accent_color":10,"url":2246},"https:\u002F\u002Fghost.localazy.com\u002Fguide-preparing-application-for-i18n-l10n-localazy\u002F",{"id":1815,"owner":2292,"created_by":10,"sort":10,"title":1821,"slug":1822,"modified_on":877,"created_on":1823,"pinned":160,"badge":10,"priority":1824,"main_image":1825,"status":5,"tags":2293,"dictionary":2297,"reading_time":1838,"excerpt":-1,"og_title":877,"og_description":877,"og_image":877},{"id":1817,"first_name":1818,"last_name":877,"slug":1819,"avatar":1820},[2294,2295,2296],{"id":402,"created_on":1959,"status":5,"label":1829,"slug":1830,"on_index_page":162},{"id":402,"created_on":1959,"status":5,"label":1832,"slug":1833,"on_index_page":160},{"id":451,"created_on":1959,"status":5,"label":1835,"slug":1836,"on_index_page":160},[],[2299,2309,2317],{"id":2300,"status":5,"title":2301,"content":2302,"slug":2303,"created_on":1887,"modified_on":2304,"category":2305},458,"Why do we love working with Localazy?","At Delta-N, we believe every client benefits from using Localazy as their localization solution. Internationalization is a recurring challenge in modern software development projects, and Localazy is our standard way of solving it. \n\nBy making it part of our trusted toolset, we ensure productivity, consistency and reliability across projects. Its intuitive design encourages teams to expand internationally with confidence, while our partnership gives us direct access to the latest updates and expert support. Localazy simplifies complexity, fosters collaboration and (most importantly) delivers results.","why-do-we-love-working-with-localazy","2025-09-16T15:08:57.000Z",{"id":662,"status":5,"created_on":2306,"sort":10,"slug":2307,"label":2308,"on_faq_index":10},"2023-01-19T08:52:51.000Z","partnership","Partnership",{"id":2310,"status":5,"title":2311,"content":2312,"slug":2313,"created_on":2314,"modified_on":2315,"category":2316},459,"Which frontend techniques and technologies is Delta-N specialized in?","We specialize in modern frontend technologies such as Angular and Microsoft solutions, including Blazor and .NET Core. Angular in particular is an enterprise-ready framework that enables us to build scalable, high-quality applications for complex organis¡zations. With enterprise software comes the need for enterprise localization, and this is exactly where Localazy fits in by making i18n seamless and reliable at scale.","which-frontend-techniques-and-technologies-is-delta-n-specialized-in","2025-09-10T10:02:53.000Z","2025-09-16T15:08:56.000Z",{"id":662,"status":5,"created_on":2306,"sort":10,"slug":2307,"label":2308,"on_faq_index":10},{"id":2318,"status":5,"title":2319,"content":2320,"slug":2321,"created_on":2314,"modified_on":2322,"category":2323},460,"How can Delta-N help you?","Delta-N supports organizations in developing and modernizing digital solutions using sustainable, future-ready technologies. We provide a set of approved and trusted libraries and tools that allow us to work iteratively and consistently, delivering tangible value at every step. This focus on standardization reduces complexity, increases reliability and enables us to scale solutions as our clients’ needs evolve. We think critically, challenge assumptions and persist until solutions are not only delivered, but built to last.","how-can-delta-n-help","2025-09-16T15:09:42.000Z",{"id":662,"status":5,"created_on":2306,"sort":10,"slug":2307,"label":2308,"on_faq_index":10},[2299,2309,2317]]