[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"main-navigation":3,"footer-homepage":723,"footer-settings":790,"footer-integrations":903,"blog-post-nav-nav":1814,"blog-post-nav-[USE LATEST FEATURED]":1836,"blog-make-multi-language-application-in-c-gettext-localazy":1851},[4,211,451,582,715,719],{"id":5,"name":6,"url":7,"url_text":7,"status":8,"groups":9},2,"Solutions",null,"published",[10,24,99,135],{"navigation_items_group_id":11},{"id":12,"sort":13,"status":8,"name":14,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":17,"show_all_url":7,"represent_as_tile":15,"items":18},3,5,"Featured Article",false,"top",true,[19],{"collection":20,"item":21},"blog_post_navigation_item_type",{"id":22,"status":8,"sort":7,"show_author_img":17,"blog_post_tag":23,"description":7},4,"nav",{"navigation_items_group_id":25},{"id":13,"sort":26,"status":8,"name":27,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":28,"represent_as_tile":17,"items":29},1,"Your Role","\u002Froles",[30,42,52,64,75,87],{"collection":31,"item":32},"relation_navigation_item_type",{"id":26,"status":8,"sort":7,"name":33,"item":34},"CMO",[35],{"collection":36,"item":37},"personas",{"id":26,"status":8,"sort":7,"slug":38,"icon":39},"chief-marketing-officers",{"id":40,"title":41},"526097d8-176f-48e5-83d3-2fc4d77061f9","La Mail Bulk",{"collection":31,"item":43},{"id":12,"status":8,"sort":7,"name":44,"item":45},"CTO",[46],{"collection":36,"item":47},{"id":22,"status":8,"sort":7,"slug":48,"icon":49},"chief-technical-officers",{"id":50,"title":51},"f808fdf0-c78b-4294-ba59-fe25f46fe825","La Mechanic",{"collection":31,"item":53},{"id":54,"status":8,"sort":7,"name":55,"item":56},20,"Product Manager",[57],{"collection":36,"item":58},{"id":59,"status":8,"sort":7,"slug":60,"icon":61},18,"product-managers",{"id":62,"title":63},"ea39586a-21fc-4b34-ba87-496028e5198f","La Worker",{"collection":31,"item":65},{"id":66,"status":8,"sort":7,"name":67,"item":68},37,"Translator",[69],{"collection":36,"item":70},{"id":54,"status":8,"sort":7,"slug":71,"icon":72},"professional-translators",{"id":73,"title":74},"07945171-d51d-4ca8-96c0-21cde9db258f","La Chat",{"collection":31,"item":76},{"id":77,"status":8,"sort":7,"name":78,"item":79},38,"Developer",[80],{"collection":36,"item":81},{"id":82,"status":8,"sort":7,"slug":83,"icon":84},30,"software-developers",{"id":85,"title":86},"1806e46d-c551-4845-bf42-4407344d229e","La Terminal",{"collection":31,"item":88},{"id":89,"status":8,"sort":7,"name":90,"item":91},27,"Localization Manager",[92],{"collection":36,"item":93},{"id":94,"status":8,"sort":7,"slug":95,"icon":96},6,"localization-managers",{"id":97,"title":98},"dac69bd1-bf5d-41d0-87d4-dd13e314698a","La Language",{"navigation_items_group_id":100},{"id":101,"sort":12,"status":8,"name":102,"render_show_all_url":15,"show_all_url_position":103,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":104},9,"Use cases","bottom",[105,111,116,121,125,130],{"collection":106,"item":107},"simple_link_navigation_item_type",{"id":108,"status":8,"sort":7,"url":109,"url_text":110,"show_favorite_icon":15},24,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fsoftware-localization","Software localization",{"collection":106,"item":112},{"id":113,"status":8,"sort":7,"url":114,"url_text":115,"show_favorite_icon":15},26,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fmobile-app-localization","Mobile app localization",{"collection":106,"item":117},{"id":118,"status":8,"sort":7,"url":119,"url_text":120,"show_favorite_icon":15},25,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fwebsite-localization","Website localization",{"collection":106,"item":122},{"id":89,"status":8,"sort":7,"url":123,"url_text":124,"show_favorite_icon":15},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fdesign-localization","Design localization",{"collection":106,"item":126},{"id":127,"status":8,"sort":7,"url":128,"url_text":129,"show_favorite_icon":15},28,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fgame-localization","Game localization",{"collection":106,"item":131},{"id":132,"status":8,"sort":7,"url":133,"url_text":134,"show_favorite_icon":15},29,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fhelp-and-docs-localization","Help & docs localization",{"navigation_items_group_id":136},{"id":137,"sort":5,"status":8,"name":138,"render_show_all_url":15,"show_all_url_position":103,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":139},8,"Industry",[140,152,163,173,184,193,204],{"collection":31,"item":141},{"id":142,"status":8,"sort":7,"name":143,"item":144},23,"Digital Agencies",[145],{"collection":36,"item":146},{"id":147,"status":8,"sort":7,"slug":148,"icon":149},7,"digital-agencies",{"id":150,"title":151},"547f5619-b21d-4b29-86f1-8b2200313cde","La Digi Agency",{"collection":31,"item":153},{"id":154,"status":8,"sort":7,"name":155,"item":156},39,"Startups & SaaS",[157],{"collection":36,"item":158},{"id":5,"status":8,"sort":7,"slug":159,"icon":160},"startups",{"id":161,"title":162},"da1516e2-4afc-40a2-bcbf-a8161e2d610d","La Saa S",{"collection":31,"item":164},{"id":5,"status":8,"sort":7,"name":165,"item":166},"E-commerce",[167],{"collection":36,"item":168},{"id":13,"status":8,"sort":7,"slug":169,"icon":170},"e-commerce",{"id":171,"title":172},"a3d09cd2-054f-4bb5-a0a2-d3d207db65df","La Ecommerce",{"collection":31,"item":174},{"id":175,"status":8,"sort":7,"name":176,"item":177},19,"FinTech Platforms",[178],{"collection":36,"item":179},{"id":89,"status":8,"sort":7,"slug":180,"icon":181},"fintech",{"id":182,"title":183},"147339ba-07d1-4e5e-baad-23d27e60c919","La Money",{"collection":31,"item":185},{"id":108,"status":8,"sort":7,"name":186,"item":187},"Translation Agencies",[188],{"collection":36,"item":189},{"id":108,"status":8,"sort":7,"slug":190,"icon":191},"translation-agencies",{"id":192,"title":98},"15d6fe33-2af8-4d6e-933d-5caa64394511",{"collection":31,"item":194},{"id":195,"status":8,"sort":7,"name":196,"item":197},22,"Travel & Tourism",[198],{"collection":36,"item":199},{"id":12,"status":8,"sort":7,"slug":200,"icon":201},"tourism",{"id":202,"title":203},"23a785e8-0ae5-4c4b-8452-aab1b58182a6","La Travel",{"collection":31,"item":205},{"id":118,"status":8,"sort":7,"name":206,"item":207},"Nonprofit Causes",[208],{"collection":36,"item":209},{"id":127,"status":8,"sort":7,"slug":210,"icon":7},"nonprofit",{"id":13,"name":212,"url":7,"url_text":7,"status":8,"groups":213},"Features",[214,284,342,392],{"navigation_items_group_id":215},{"id":216,"sort":94,"status":8,"name":217,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":218},11,"Localization",[219,228,237,246,255,259,267,276],{"collection":31,"item":220},{"id":221,"status":8,"sort":7,"name":222,"item":223},44,"Localization services",[224],{"collection":225,"item":226},"products",{"id":101,"status":8,"slug":227},"continuous-localization-team",{"collection":31,"item":229},{"id":230,"status":8,"sort":7,"name":231,"item":232},45,"Translation management",[233],{"collection":234,"item":235},"term_landing_page",{"id":132,"status":8,"slug":236},"translation-management-system",{"collection":31,"item":238},{"id":239,"status":8,"sort":7,"name":240,"item":241},46,"Context Screenshots",[242],{"collection":225,"item":243},{"id":244,"status":8,"slug":245},13,"context-screenshots-ocr",{"collection":31,"item":247},{"id":248,"status":8,"sort":7,"name":249,"item":250},47,"Translation Glossary",[251],{"collection":225,"item":252},{"id":253,"status":8,"slug":254},17,"glossary",{"collection":106,"item":256},{"id":22,"status":8,"sort":7,"url":257,"url_text":258,"show_favorite_icon":15},"\u002Fdocs\u002Fgeneral\u002Freviewing-translations","Quality control",{"collection":31,"item":260},{"id":261,"status":8,"sort":7,"name":262,"item":263},34,"Connected Projects",[264],{"collection":225,"item":265},{"id":26,"status":8,"slug":266},"connected-projects",{"collection":31,"item":268},{"id":269,"status":8,"sort":7,"name":270,"item":271},64,"Plural handling",[272],{"collection":225,"item":273},{"id":274,"status":8,"slug":275},32,"plurals",{"collection":31,"item":277},{"id":278,"status":8,"sort":7,"name":279,"item":280},65,"Style guides",[281],{"collection":225,"item":282},{"id":77,"status":8,"slug":283},"style-guide",{"navigation_items_group_id":285},{"id":286,"sort":147,"status":8,"name":287,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":288},12,"Translation",[289,297,305,309,317,325,334],{"collection":31,"item":290},{"id":291,"status":8,"sort":7,"name":292,"item":293},36,"Professional translations",[294],{"collection":234,"item":295},{"id":82,"status":8,"slug":296},"professional-translation-services",{"collection":31,"item":298},{"id":299,"status":8,"sort":7,"name":300,"item":301},48,"Crowdsourced translations",[302],{"collection":225,"item":303},{"id":137,"status":8,"slug":304},"share-tm",{"collection":106,"item":306},{"id":13,"status":8,"sort":7,"url":307,"url_text":308,"show_favorite_icon":15},"\u002Fdocs\u002Fgeneral\u002Ftranslating-strings","Translation interface",{"collection":31,"item":310},{"id":311,"status":8,"sort":7,"name":312,"item":313},55,"Machine translations",[314],{"collection":225,"item":315},{"id":13,"status":8,"slug":316},"machine-translation",{"collection":31,"item":318},{"id":319,"status":8,"sort":7,"name":320,"item":321},60,"Localazy AI translation",[322],{"collection":225,"item":323},{"id":132,"status":8,"slug":324},"localazy-ai",{"collection":31,"item":326},{"id":327,"status":8,"sort":7,"name":328,"item":329},61,"Translation Memory",[330],{"collection":225,"item":331},{"id":332,"status":8,"slug":333},35,"translation-memory",{"collection":31,"item":335},{"id":336,"status":8,"sort":7,"name":337,"item":338},63,"Code & placeholders",[339],{"collection":225,"item":340},{"id":82,"status":8,"slug":341},"code-and-placeholders",{"navigation_items_group_id":343},{"id":244,"sort":137,"status":8,"name":344,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":345},"Management",[346,350,358,367,376,384,388],{"collection":106,"item":347},{"id":137,"status":8,"sort":7,"url":348,"url_text":349,"show_favorite_icon":15},"\u002Fdocs\u002Fgeneral\u002Fdefining-user-roles","User roles",{"collection":31,"item":351},{"id":352,"status":8,"sort":7,"name":353,"item":354},51,"Duplicity Linking",[355],{"collection":225,"item":356},{"id":175,"status":8,"slug":357},"duplicity-linking",{"collection":31,"item":359},{"id":360,"status":8,"sort":7,"name":361,"item":362},52,"Language Permissions",[363],{"collection":225,"item":364},{"id":365,"status":8,"slug":366},21,"language-permissions",{"collection":31,"item":368},{"id":369,"status":370,"sort":7,"name":371,"item":372},53,"draft","Automations",[373],{"collection":225,"item":374},{"id":54,"status":8,"slug":375},"automations",{"collection":31,"item":377},{"id":378,"status":8,"sort":7,"name":379,"item":380},58,"Branching",[381],{"collection":225,"item":382},{"id":89,"status":8,"slug":383},"branching",{"collection":106,"item":385},{"id":365,"status":370,"sort":7,"url":386,"url_text":387,"show_favorite_icon":15},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fsso-configuration","SSO",{"collection":106,"item":389},{"id":195,"status":370,"sort":7,"url":390,"url_text":391,"show_favorite_icon":15},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Flanguage-statistics","Reporting",{"navigation_items_group_id":393},{"id":394,"sort":101,"status":8,"name":395,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":396},14,"Development",[397,404,412,419,426,434,443],{"collection":31,"item":398},{"id":132,"status":8,"sort":7,"name":399,"item":400},"Translation API",[401],{"collection":225,"item":402},{"id":216,"status":8,"slug":403},"translation-api",{"collection":31,"item":405},{"id":406,"status":8,"sort":7,"name":407,"item":408},33,"Localazy CLI",[409],{"collection":225,"item":410},{"id":147,"status":8,"slug":411},"cli",{"collection":31,"item":413},{"id":274,"status":8,"sort":7,"name":414,"item":415},"Language CDN",[416],{"collection":225,"item":417},{"id":22,"status":8,"slug":418},"language-cdn",{"collection":31,"item":420},{"id":127,"status":8,"sort":7,"name":421,"item":422},"Releases",[423],{"collection":225,"item":424},{"id":94,"status":8,"slug":425},"releases",{"collection":31,"item":427},{"id":428,"status":370,"sort":7,"name":429,"item":430},57,"Format Conversions",[431],{"collection":225,"item":432},{"id":5,"status":8,"slug":433},"format-conversions",{"collection":31,"item":435},{"id":436,"status":8,"sort":7,"name":437,"item":438},59,"Webhooks",[439],{"collection":225,"item":440},{"id":441,"status":8,"slug":442},31,"webhooks",{"collection":31,"item":444},{"id":445,"status":8,"sort":7,"name":446,"item":447},62,"Export Aliases",[448],{"collection":225,"item":449},{"id":406,"status":8,"slug":450},"export-aliases",{"id":22,"name":452,"url":7,"url_text":7,"status":8,"groups":453},"Integrations",[454,572],{"navigation_items_group_id":455},{"id":147,"sort":456,"status":8,"name":457,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":458},10,"Most popular",[459],{"collection":31,"item":460},{"id":286,"status":8,"sort":7,"name":452,"item":461},[462,470,477,484,491,498,505,512,519,526,533,542,549,556,564],{"collection":463,"item":464},"platforms",{"id":94,"status":8,"sort":26,"slug":465,"name":466,"icon":467},"android","Android",{"id":468,"title":469},"ff965add-53b0-44ad-b27c-ea4ef641d384","Ic Outline Android",{"collection":463,"item":471},{"id":147,"status":8,"sort":5,"slug":472,"name":473,"icon":474},"ios","iOS",{"id":475,"title":476},"886285d7-816a-4430-b5a5-edfe307b238e","Ios",{"collection":463,"item":478},{"id":406,"status":8,"sort":12,"slug":479,"name":480,"icon":481},"react","React",{"id":482,"title":483},"26757a90-88a3-4a94-b587-9f38614ed3bd","Logos React",{"collection":463,"item":485},{"id":175,"status":8,"sort":22,"slug":486,"name":487,"icon":488},"vuejs","Vue.js",{"id":489,"title":490},"6180b41f-3249-47d3-adcd-50fe1cf11bf1","Vue",{"collection":463,"item":492},{"id":493,"status":8,"sort":13,"slug":494,"name":495,"icon":496},16,"angular","Angular",{"id":497,"title":495},"2a31a97a-48c5-4531-aa36-41c9dd0bdbef",{"collection":463,"item":499},{"id":26,"status":8,"sort":94,"slug":500,"name":501,"icon":502},"flutter","Flutter",{"id":503,"title":504},"b9f13a11-9328-4a03-86cf-b20de0685606","Logos Flutter",{"collection":463,"item":506},{"id":12,"status":8,"sort":216,"slug":507,"name":508,"icon":509},"typescript","TypeScript",{"id":510,"title":511},"8d1319b5-8a96-4199-8407-00add3418b1f","Logos Typescript Icon",{"collection":463,"item":513},{"id":441,"status":8,"sort":286,"slug":514,"name":515,"icon":516},"javascript","JavaScript",{"id":517,"title":518},"4218d0c9-7e6b-494d-9663-37ceaf93ee8c","Logos Javascript",{"collection":463,"item":520},{"id":286,"status":8,"sort":54,"slug":521,"name":522,"icon":523},"json","JSON",{"id":524,"title":525},"99ac3b7c-dba5-4693-a4f4-1f27a6d7782d","Logos Json",{"collection":463,"item":527},{"id":365,"status":8,"sort":365,"slug":528,"name":529,"icon":530},"xliff","XLIFF",{"id":531,"title":532},"ca424cc8-e8a7-4aef-8dca-ef4a4d1334fc","Format",{"collection":463,"item":534},{"id":535,"status":8,"sort":536,"slug":537,"name":538,"icon":539},72,54,"strapi","Strapi",{"id":540,"title":541},"cde7f1d0-f2e0-4243-929e-a3f8f9146e69","Strapi Logo Purple",{"collection":463,"item":543},{"id":319,"status":8,"sort":311,"slug":544,"name":545,"icon":546},"figma","Figma",{"id":547,"title":548},"813745a4-a77d-4735-93b7-e0dd731b2304","Figma Icon",{"collection":463,"item":550},{"id":352,"status":8,"sort":248,"slug":551,"name":552,"icon":553},"microsoft-excel","Microsoft Excel",{"id":554,"title":555},"7a175955-7b96-4561-939f-a0e1924faa40","Excel",{"collection":463,"item":557},{"id":558,"status":8,"sort":327,"slug":559,"name":560,"icon":561},66,"github-actions","GitHub Actions",{"id":562,"title":563},"da17554f-ac6d-443d-9bac-1f29645ec1c6","Github Icon",{"collection":463,"item":565},{"id":566,"status":8,"sort":567,"slug":568,"name":569,"icon":570},97,999,"webflow","Webflow",{"id":571,"title":569},"ff43a386-52f8-499f-b77c-ab9a30f4a77e",{"navigation_items_group_id":573},{"id":22,"sort":216,"status":8,"name":574,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":575},"Explore more",[576],{"collection":577,"item":578},"text_link_navigation_item_type",{"id":26,"status":8,"sort":7,"text":579,"url":580,"url_text":581},"Localazy is a technology-agnostic platform supporting 50+ frameworks, file formats & popular tools.","\u002Fintegrations","See all integrations",{"id":26,"name":583,"url":7,"url_text":7,"status":8,"groups":584},"Resources",[585,618,624],{"navigation_items_group_id":586},{"id":26,"sort":286,"status":8,"name":587,"render_show_all_url":15,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":7,"represent_as_tile":15,"items":588},"Helpful Links",[589,593,597,601,605,609,614],{"collection":106,"item":590},{"id":244,"status":8,"sort":7,"url":591,"url_text":592,"show_favorite_icon":17},"\u002Fblog","Localazy Blog",{"collection":106,"item":594},{"id":394,"status":8,"sort":7,"url":595,"url_text":596,"show_favorite_icon":17},"\u002Fdocs","Documentation",{"collection":106,"item":598},{"id":26,"status":8,"sort":7,"url":599,"url_text":600,"show_favorite_icon":15},"https:\u002F\u002Fdiscuss.localazy.com\u002F","Discussion Forum",{"collection":106,"item":602},{"id":286,"status":8,"sort":7,"url":603,"url_text":604,"show_favorite_icon":15},"\u002Fcase-study","Case Studies",{"collection":106,"item":606},{"id":12,"status":8,"sort":7,"url":607,"url_text":608,"show_favorite_icon":15},"\u002Fpartnership","Become a Partner",{"collection":106,"item":610},{"id":611,"status":8,"sort":7,"url":612,"url_text":613,"show_favorite_icon":15},15,"\u002Ffaq","FAQ",{"collection":106,"item":615},{"id":253,"status":8,"sort":7,"url":616,"url_text":617,"show_favorite_icon":15},"\u002Ftags\u002Frelease-update","Release Updates",{"navigation_items_group_id":619},{"id":5,"sort":394,"status":8,"name":592,"render_show_all_url":17,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":591,"represent_as_tile":15,"items":620},[621],{"collection":20,"item":622},{"id":12,"status":8,"sort":7,"show_author_img":15,"blog_post_tag":623,"description":7},"[USE LATEST FEATURED]",{"navigation_items_group_id":625},{"id":94,"sort":244,"status":8,"name":596,"render_show_all_url":17,"show_all_url_position":16,"show_favorite_icon":15,"show_all_url":595,"represent_as_tile":15,"items":626},[627,641,653,664,676,686,697,705],{"collection":31,"item":628},{"id":22,"status":8,"sort":7,"name":629,"item":630},"General",[631],{"collection":632,"item":633},"docs_section",{"id":5,"status":8,"sort":26,"slug":634,"name":629,"icon":635,"featured_icon":638},"general",{"id":636,"title":637},"423101f1-308c-42f1-8dfe-53272019e7cb","Global",{"id":639,"title":640},"0f7ca4cb-dc3b-4f62-b476-132ed5c4931f","General Doc",{"collection":31,"item":642},{"id":13,"status":8,"sort":7,"name":643,"item":644},"CLI",[645],{"collection":632,"item":646},{"id":12,"status":8,"sort":5,"slug":411,"name":643,"icon":647,"featured_icon":650},{"id":648,"title":649},"2f7a4573-8265-4d76-8d55-ce0cc79b8983","Cli",{"id":651,"title":652},"3f76ff7b-0e74-4046-bb03-4ca99c3b66d5","Doc Cat Cli",{"collection":31,"item":654},{"id":137,"status":8,"sort":7,"name":655,"item":656},"API",[657],{"collection":632,"item":658},{"id":54,"status":8,"sort":12,"slug":659,"name":655,"icon":660,"featured_icon":661},"api",{"id":648,"title":649},{"id":662,"title":663},"20866781-e69b-4e01-9456-05437487b75c","API Doc",{"collection":31,"item":665},{"id":666,"status":8,"sort":7,"name":667,"item":668},50,"CDN",[669],{"collection":632,"item":670},{"id":113,"status":8,"sort":22,"slug":671,"name":667,"icon":672,"featured_icon":673},"cdn",{"id":636,"title":637},{"id":674,"title":675},"a8ee9cb7-4e02-41f0-b595-eb518c3085b6","Doc Cat Cdn",{"collection":31,"item":677},{"id":94,"status":8,"sort":7,"name":466,"item":678},[679],{"collection":632,"item":680},{"id":26,"status":8,"sort":13,"slug":465,"name":466,"icon":681,"featured_icon":683},{"id":682,"title":466},"fb8329ae-0c0c-4fbc-bcdc-83f2eeda1039",{"id":684,"title":685},"f7c0dec8-5b42-4943-ab3a-e3665723ad6f","Doc Cat Android",{"collection":31,"item":687},{"id":147,"status":8,"sort":7,"name":473,"item":688},[689],{"collection":632,"item":690},{"id":22,"status":8,"sort":94,"slug":472,"name":473,"icon":691,"featured_icon":694},{"id":692,"title":693},"289e136c-55df-4d51-847b-1782a2308ee4","Ios Blue",{"id":695,"title":696},"2968d3f0-14b5-4427-82e7-f1ea2de17846","Doc Cat Ios",{"collection":31,"item":698},{"id":101,"status":8,"sort":7,"name":545,"item":699},[700],{"collection":632,"item":701},{"id":365,"status":8,"sort":147,"slug":544,"name":545,"icon":702,"featured_icon":703},{"id":648,"title":649},{"id":704,"title":545},"f5e66b5b-a439-47f6-af4a-6ad261de2e87",{"collection":31,"item":706},{"id":456,"status":8,"sort":7,"name":538,"item":707},[708],{"collection":632,"item":709},{"id":142,"status":8,"sort":137,"slug":537,"name":538,"icon":710,"featured_icon":712},{"id":711,"title":538},"3b4b03c7-e131-49e6-a014-c8c2c8a2751e",{"id":713,"title":714},"1dd05c76-e517-4aea-a3d8-49cfddb40056","Strapi Doc",{"id":12,"name":716,"url":717,"url_text":716,"status":8,"groups":718},"Pricing","\u002Fpricing",[],{"id":94,"name":720,"url":721,"url_text":720,"status":8,"groups":722},"Book a demo","\u002Fbook-demo",[],{"status":8,"header_badges":724,"footer_badges":742,"footer_secured_badges":748,"slider_badges":760},[725,732,737],{"id":26,"status":8,"sort":7,"link":726,"title":727,"badgeType":728,"badgeName":729,"metadata":7,"image":730},"https:\u002F\u002Fwww.g2.com\u002Fproducts\u002Flocalazy\u002Freviews","Best meets requirements","Other","G2-winter-24-best-meets-requirments",{"id":731},"8d5dd6fd-6995-4c92-8219-a6ed5ba6acdc",{"id":5,"status":8,"sort":7,"link":726,"title":733,"badgeType":728,"badgeName":734,"metadata":7,"image":735},"Best support","G2-winter-24-best-support",{"id":736},"e59dd465-84d9-45c7-987d-dd4048fd6992",{"id":12,"status":8,"sort":7,"link":726,"title":738,"badgeType":728,"badgeName":739,"metadata":7,"image":740},"Easiest admin","G2-winter-24-easiest-admin",{"id":741},"5f12c4c8-bec0-47cf-87b4-a4502e9f1bd2",[743],{"id":286,"status":8,"sort":7,"link":726,"title":744,"badgeType":728,"badgeName":745,"metadata":7,"image":746},"Users love us","Users love us 25",{"id":747},"232416a5-86ba-4be6-85a5-b88802003d53",[749,755],{"id":216,"status":8,"sort":7,"link":750,"title":751,"badgeType":728,"badgeName":752,"metadata":7,"image":753},"https:\u002F\u002Fsprinto.com\u002Fget-iso-27001\u002F","Sprinto ISO 27001","Sprinto ISO 27001 certificate",{"id":754},"c1c6c06c-6caf-4b78-8a7e-9606c395eb61",{"id":244,"status":8,"sort":7,"link":756,"title":757,"badgeType":728,"badgeName":757,"metadata":7,"image":758},"https:\u002F\u002Fwww.aicpa.org\u002Fsoc4so","SOC certificate",{"id":759},"4f4bc0a6-09a0-41df-8295-8f990d96d941",[761,767,771,775,779,783,788],{"id":13,"status":8,"sort":7,"link":726,"title":762,"badgeType":728,"badgeName":763,"metadata":764,"image":765},"Most likely to recommend","a","",{"id":766},"da055731-3f11-4fc7-96f2-c11c0b84c831",{"id":94,"status":8,"sort":7,"link":726,"title":768,"badgeType":728,"badgeName":7,"metadata":7,"image":769},"EMEA High Performer",{"id":770},"586fb488-81f2-41db-a4e8-ef309e50c0e6",{"id":147,"status":8,"sort":7,"link":726,"title":772,"badgeType":728,"badgeName":7,"metadata":7,"image":773},"Ease of Doing Business With",{"id":774},"bfa26865-430e-463d-9886-cb56a8a8ecf6",{"id":137,"status":8,"sort":7,"link":726,"title":776,"badgeType":728,"badgeName":7,"metadata":7,"image":777},"High Performer",{"id":778},"2cc1ba0f-c23a-4c97-ad4a-a655c97466fe",{"id":101,"status":8,"sort":7,"link":726,"title":780,"badgeType":728,"badgeName":7,"metadata":7,"image":781},"Fastest Implementation",{"id":782},"6f297758-1c95-45f4-a6e9-528319897132",{"id":456,"status":8,"sort":7,"link":784,"title":785,"badgeType":728,"badgeName":7,"metadata":7,"image":786},"https:\u002F\u002Fwww.intercert.com\u002Fservices\u002Fgovernance-risk-compliance\u002Fiso-iec-27001","Intercert ISO 27001",{"id":787},"0521a5f1-e1f2-4da6-a2bc-dc92773f2a7b",{"id":216,"status":8,"sort":7,"link":750,"title":751,"badgeType":728,"badgeName":752,"metadata":7,"image":789},{"id":754},{"id":26,"status":8,"security_section_title":791,"loved_section_title":792,"columns":793,"social_links":863,"policy_links":893},"Secured & trusted","Loved by users",[794,806,821,842,845],{"id":26,"status":8,"sort":7,"title":795,"column_key":796,"links":797},"Localazy","connect",[798,800,803],{"id":216,"status":8,"sort":26,"title":720,"url":799},"___LOCALAZY_MEETING_URL___",{"id":286,"status":8,"sort":5,"title":801,"url":802},"Contact","\u002Fcontact",{"id":365,"status":8,"sort":12,"title":804,"url":805},"About us","\u002Fabout-us",{"id":5,"status":8,"sort":7,"title":807,"column_key":808,"links":809},"Programs","programs",[810,812,815,818],{"id":26,"status":8,"sort":22,"title":811,"url":607},"Partner Program",{"id":5,"status":8,"sort":13,"title":813,"url":814},"Ambassador Program","\u002Fambassador",{"id":12,"status":8,"sort":94,"title":816,"url":817},"Startup Program","\u002Ffor\u002Fstartups",{"id":22,"status":8,"sort":147,"title":819,"url":820},"Nonprofits","\u002Ffor\u002Fnonprofit",{"id":12,"status":8,"sort":7,"title":822,"column_key":823,"links":824},"Use Cases","use_cases",[825,828,831,833,836,839],{"id":13,"status":8,"sort":137,"title":826,"url":827},"Software Localization","\u002Fterm\u002Fsoftware-localization",{"id":94,"status":8,"sort":101,"title":829,"url":830},"Machine Translation Services","\u002Ffeatures\u002Fmachine-translation",{"id":147,"status":8,"sort":456,"title":399,"url":832},"\u002Ffeatures\u002Ftranslation-api",{"id":137,"status":8,"sort":216,"title":834,"url":835},"Crowdsourced Translations","\u002Ffeatures\u002Fshare-tm",{"id":101,"status":8,"sort":286,"title":837,"url":838},"Figma i18n & localization","\u002Ffeatures\u002Ffigma-localization-plugin",{"id":456,"status":8,"sort":244,"title":840,"url":841},"Translation as a Service","\u002Fterm\u002Ftranslation-service",{"id":22,"status":8,"sort":7,"title":452,"column_key":843,"links":844},"integrations",[],{"id":13,"status":8,"sort":7,"title":583,"column_key":846,"links":847},"resources",[848,849,852,853,856,858,859,860],{"id":244,"status":8,"sort":394,"title":596,"url":595},{"id":394,"status":8,"sort":611,"title":850,"url":851},"Dictionary","\u002Fdictionary",{"id":611,"status":8,"sort":493,"title":604,"url":603},{"id":493,"status":8,"sort":253,"title":854,"url":855},"Discussion forum","___DISCUSS_URL___",{"id":253,"status":8,"sort":59,"title":857,"url":591},"Localization Blog",{"id":59,"status":8,"sort":175,"title":613,"url":612},{"id":175,"status":8,"sort":54,"title":716,"url":717},{"id":54,"status":8,"sort":365,"title":861,"url":862},"Brand assets","https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Fu\u002F1\u002Ffolders\u002F1tZqsZHBlGelz7A2FwTsiwrs4j3sd9HTk",[864,869,874,879,884,889],{"id":26,"status":8,"sort":7,"platform":865,"icon":866,"url":867,"label":868},"feed","rss","\u002Ffeed.xml","Localazy RSS Feed",{"id":5,"status":8,"sort":7,"platform":870,"icon":871,"url":872,"label":873},"facebook","fb-logo","https:\u002F\u002Fwww.facebook.com\u002Flocalazy\u002F","Localazy facebook",{"id":12,"status":8,"sort":7,"platform":875,"icon":876,"url":877,"label":878},"github","github-logo","https:\u002F\u002Fgithub.com\u002Flocalazy","Localazy GitHub",{"id":22,"status":8,"sort":7,"platform":880,"icon":881,"url":882,"label":883},"x","x-twitter","https:\u002F\u002Fx.com\u002Flocalazy","Localazy X",{"id":13,"status":8,"sort":7,"platform":885,"icon":886,"url":887,"label":888},"linkedin","linkedin-logo","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002F37836599\u002F","Localazy LinkedIn",{"id":94,"status":8,"sort":7,"platform":890,"icon":891,"url":855,"label":892},"discourse","discourse-logo","Localazy Discourse",[894,897,900],{"id":26,"status":8,"sort":7,"title":895,"url":896,"action":7},"Privacy policy","\u002Fprivacy-policy",{"id":5,"status":8,"sort":7,"title":898,"url":899,"action":7},"Terms & Conditions","\u002Fterms-and-conditions",{"id":12,"status":8,"sort":7,"title":901,"url":7,"action":902},"Cookies","cookie-consent",[904,1044,1122,1228,1314,1393,1482,1573,1660,1759],{"id":406,"status":8,"created_on":905,"modified_on":906,"name":480,"slug":479,"description":907,"docs_link":908,"priority":7,"has_sdk":15,"sort":12,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":909,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"is_enterprise":15,"is_popular":15,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":913,"upload_features":914,"icon":915,"meta_image":916,"primary_tag":918,"tags":934,"integration_methods":952,"recommended_methods":1028,"default_integration_method":1029,"faq_categories":1036,"translations":1042,"platforms_id":406},"2022-03-18T08:09:24.000Z","2025-02-26T13:36:08.000Z","Manage your React app translations with Localazy, a continuous localization tool. React i18n done right. ","\u002Fdocs\u002Fcli\u002Fjson-format","JSON format support","CLI support","react-i18next and more","Use Localazy to translate your React projects with your favorite i18n library.",{"json":521},[],{"id":482},{"id":917},"a97492ec-ee8d-429c-bf66-d0fe59b6e5c9",{"id":13,"status":8,"sort":5,"created_on":919,"label":920,"hidden":15,"icon":921,"translations":923},"2022-03-17T12:23:44.000Z","Web apps",{"id":922},"c9e70e4f-8136-432a-8d82-53c3501a9eb4",[924,926,929,932],{"id":13,"languages_code":925,"label":920},"xxa",{"id":230,"languages_code":927,"label":928},"es","Aplicaciones web",{"id":666,"languages_code":930,"label":931},"cs","Webové aplikace",{"id":436,"languages_code":933,"label":920},"en",[935,942],{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":936,"translations":937},{"id":922},[938,939,940,941],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":137,"status":8,"sort":101,"label":943,"hidden":15,"created_on":944,"icon":7,"translations":945},"Framework","2022-03-17T12:23:45.000Z",[946,947,949,950],{"id":137,"languages_code":925,"label":943},{"id":369,"languages_code":927,"label":948},"Marco",{"id":319,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},67,[953,965,990,1011],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":956},"Translate strings directly or upload them into your Localazy project.","\u002Fdocs\u002Fapi\u002Fintroduction",[957,958,961,963],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},40,"Utilice la API para exportar traducciones e importar contenido de\u002Fa Localazy mediante programación.",{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},"Choose between translating strings directly or uploading them into Localazy.",{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},"Pomocí rozhraní API můžete programovaně exportovat překlady a importovat obsah z\u002Fdo Localazy.",{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":971},"Create source keys online","add-keys-manually","Add source keys via the web interface online and sync them into your project later.","\u002Fdocs\u002Fgeneral\u002Fimporting-localization-files#add-new-keys-in-ui","vpn-key-outline",[972,973,976,977,980,983,984,985],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},"Cree claves fuente en línea","Añada claves fuente a través de la interfaz web en línea y sincronícelas posteriormente en su proyecto.",{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},"Vytvářejte zdrojové klíče online","Přidejte zdrojové klíče přes webové rozhraní online a synchronizujte je do svého projektu později.",{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},"Cree claves de origen en línea","Añada claves de origen a través de la interfaz web en línea y sincronícelas posteriormente en su proyecto.",{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},88,"de","Erstellen Sie Quellschlüssel online","Fügen Sie Quellschlüssel über die Weboberfläche online hinzu und synchronisieren Sie sie später mit Ihrem Projekt.",{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":997},"Direct file upload","File upload","web-upload","Upload your texts and existing translations in any format directly to start quickly.","\u002Fdocs\u002Fgeneral\u002Fimporting-localization-files","file-upload",[998,999,1002,1003,1007],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},"Carga directa de archivos","Cargue sus textos y traducciones existentes en cualquier formato directamente para empezar rápidamente.",{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},56,"Přímé nahrávání souborů","Nahrajte přímo své texty a stávající překlady v libovolném formátu a začněte pracovat ihned.",{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},85,"Direkter Datei-Upload","Laden Sie Ihre Texte und vorhandenen Übersetzungen in einem beliebigen Format direkt hoch, um schnell loszulegen.",{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1015},"Command Line Interface","The best option for developers that want to make localization an automated part of their workflow.","\u002Fdocs\u002Fcli\u002Fthe-basics",[1016,1017,1020,1021,1024],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},"Interfaz de Línea de Comandos","La mejor opción para los desarrolladores que deseen hacer de la localización una parte automatizada de su flujo de trabajo.",{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},"Rozhraní Příkazového Řádku","Nejlepší volba pro vývojáře, kteří chtějí, aby se lokalizace stala automatizovanou součástí jejich pracovních postupů.",{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},87,"Befehlszeilenschnittstelle","Die beste Option für Entwickler, die die Lokalisierung zu einem automatisierten Teil ihres Arbeitsablaufs machen möchten.",[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1030},[1031,1032,1033,1034,1035],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1037],{"id":1038,"status":8,"created_on":1039,"sort":7,"slug":1040,"label":1041,"on_faq_index":7},76,"2025-02-26T12:44:29.000Z","front-end-common","Front-end Common",[1043],{"languages_code":925,"name":480,"slug":479,"description":907,"support_type":909,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":911,"tile_description":912,"id":406,"platforms_id":406,"docs_link":908},{"id":175,"status":8,"created_on":905,"modified_on":1045,"name":487,"slug":486,"description":1046,"docs_link":908,"priority":7,"has_sdk":15,"sort":22,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":909,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"is_enterprise":15,"is_popular":15,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":1049,"upload_features":1050,"icon":1051,"meta_image":1052,"primary_tag":1054,"tags":1061,"integration_methods":1075,"recommended_methods":1106,"default_integration_method":1107,"faq_categories":1114,"translations":1120,"platforms_id":175},"2025-02-26T13:35:41.000Z","Online Vue.js project localization tool for your translation management. Enjoy true continuous localization with Localazy & translate your JSON files automatically.","Vue.js & JSON","Enjoy true continuous localization with Localazy & translate your Vue projects automatically.",{"json":521},[],{"id":489},{"id":1053},"8171b836-d6b8-4354-8db3-34ccd384970d",{"id":13,"status":8,"sort":5,"created_on":919,"label":920,"hidden":15,"icon":1055,"translations":1056},{"id":922},[1057,1058,1059,1060],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},[1062,1069],{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":1063,"translations":1064},{"id":922},[1065,1066,1067,1068],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":137,"status":8,"sort":101,"label":943,"hidden":15,"created_on":944,"icon":7,"translations":1070},[1071,1072,1073,1074],{"id":137,"languages_code":925,"label":943},{"id":369,"languages_code":927,"label":948},{"id":319,"languages_code":930,"label":943},{"id":951,"languages_code":933,"label":943},[1076,1082,1092,1099],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1077},[1078,1079,1080,1081],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1083},[1084,1085,1086,1087,1088,1089,1090,1091],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1093},[1094,1095,1096,1097,1098],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1100},[1101,1102,1103,1104,1105],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1108},[1109,1110,1111,1112,1113],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1115,1119],{"id":1004,"status":8,"created_on":1116,"sort":7,"slug":1117,"label":1118,"on_faq_index":7},"2023-03-01T11:21:41.000Z","vue-localization","Vue.js Localization",{"id":1038,"status":8,"created_on":1039,"sort":7,"slug":1040,"label":1041,"on_faq_index":7},[1121],{"languages_code":925,"name":487,"slug":486,"description":1046,"support_type":909,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1047,"tile_description":1048,"id":175,"platforms_id":175,"docs_link":908},{"id":26,"status":8,"created_on":905,"modified_on":1123,"name":501,"slug":500,"description":1124,"docs_link":1125,"priority":7,"has_sdk":15,"sort":94,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1126,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":15,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"is_enterprise":15,"is_popular":15,"primary_use_case":1128,"hierarchy_handling":1129,"best_for":1130,"file_extension":1131,"format_code_example":1132,"format_to_extension":1133,"upload_features":1135,"icon":1136,"meta_image":1137,"primary_tag":1139,"tags":1150,"integration_methods":1186,"recommended_methods":1217,"default_integration_method":1218,"faq_categories":1225,"translations":1226,"platforms_id":26},"2025-07-03T14:21:42.000Z","Learn how to use Localazy CLI for localization of Flutter app. Flutter’s ARB format is fully supported including arrays, plurals, and selected context information. No extra configuration is necessary, but you can enable certain features if you want to.","\u002Fdocs\u002Fcli\u002Fflutter-format","ARB format support","Use the Localazy CLI for localization of Flutter projects. Flutter’s ARB format is fully supported.","Supports metadata like placeholders","JSON-like key-value","Flutter apps",".arb","```\n{\n  \"localazy_message\": \"Go international, today. With Localazy.\"\n}\n```",{"arb":1134},"arb",[],{"id":503},{"id":1138},"c2674666-4371-4aa4-9a65-438c7363fafe",{"id":94,"status":8,"sort":137,"created_on":944,"label":1140,"hidden":15,"icon":1141,"translations":1143},"Mobile apps",{"id":1142},"c9c7e1f5-8b59-4016-ae0c-6fba9469cd55",[1144,1145,1147,1149],{"id":94,"languages_code":925,"label":1140},{"id":239,"languages_code":927,"label":1146},"Aplicaciones móviles",{"id":311,"languages_code":930,"label":1148},"Mobilní aplikace",{"id":278,"languages_code":933,"label":1140},[1151,1162,1169,1176],{"id":147,"status":8,"sort":175,"label":1152,"hidden":15,"created_on":944,"icon":1153,"translations":1155},"Desktop & Games",{"id":1154},"65b04533-5b4c-430c-b8a4-ecce84754200",[1156,1157,1159,1161],{"id":147,"languages_code":925,"label":1152},{"id":248,"languages_code":927,"label":1158},"Escritorio y Juegos",{"id":1004,"languages_code":930,"label":1160},"Stolní počítače & Hry",{"id":558,"languages_code":933,"label":1152},{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":1163,"translations":1164},{"id":922},[1165,1166,1167,1168],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":94,"status":8,"sort":137,"label":1140,"hidden":15,"created_on":944,"icon":1170,"translations":1171},{"id":1142},[1172,1173,1174,1175],{"id":94,"languages_code":925,"label":1140},{"id":239,"languages_code":927,"label":1146},{"id":311,"languages_code":930,"label":1148},{"id":278,"languages_code":933,"label":1140},{"id":82,"status":8,"sort":274,"label":1177,"hidden":17,"created_on":944,"icon":7,"translations":1178},"ARB",[1179,1180,1182,1184],{"id":82,"languages_code":925,"label":1177},{"id":1181,"languages_code":927,"label":1177},120,{"id":1183,"languages_code":930,"label":1177},125,{"id":1185,"languages_code":933,"label":1177},130,[1187,1193,1203,1210],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1188},[1189,1190,1191,1192],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1194},[1195,1196,1197,1198,1199,1200,1201,1202],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1204},[1205,1206,1207,1208,1209],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1211},[1212,1213,1214,1215,1216],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1219},[1220,1221,1222,1223,1224],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],[1227],{"languages_code":925,"name":501,"slug":500,"description":1124,"support_type":1126,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1126,"tile_description":1127,"id":26,"platforms_id":26,"docs_link":1125},{"id":441,"status":8,"created_on":1229,"modified_on":1230,"name":515,"slug":514,"description":1231,"docs_link":1232,"priority":7,"has_sdk":15,"sort":286,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1233,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"is_enterprise":15,"is_popular":15,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":1235,"upload_features":1237,"icon":1238,"meta_image":1239,"primary_tag":1241,"tags":1254,"integration_methods":1269,"recommended_methods":1300,"default_integration_method":1301,"faq_categories":1308,"translations":1312,"platforms_id":441},"2022-03-18T08:09:25.000Z","2024-07-17T07:43:22.000Z","Localize your app with JavaScript localizations and Localazy CLI.\nUpload JavaScript files with strings to Localazy and manage your translations easily. Download translated files back.","\u002Fdocs\u002Fcli\u002Fjavascript-format","JS file support","Translating JS files is easy as a pie with Localazy!",{"js":1236},"js",[],{"id":517},{"id":1240},"2c6699eb-1d80-4772-8268-5597dbcead8c",{"id":456,"status":8,"sort":456,"created_on":944,"label":1242,"hidden":15,"icon":1243,"translations":1245},"Programming Languages",{"id":1244},"8c5836bb-1fbe-49c5-9330-8f931838c457",[1246,1247,1249,1252],{"id":456,"languages_code":925,"label":1242},{"id":336,"languages_code":927,"label":1248},"Lenguajes de Programación",{"id":1250,"languages_code":930,"label":1251},68,"Programovací Jazyky",{"id":1253,"languages_code":933,"label":1242},70,[1255,1262],{"id":13,"status":8,"sort":5,"label":920,"hidden":15,"created_on":919,"icon":1256,"translations":1257},{"id":922},[1258,1259,1260,1261],{"id":13,"languages_code":925,"label":920},{"id":230,"languages_code":927,"label":928},{"id":666,"languages_code":930,"label":931},{"id":436,"languages_code":933,"label":920},{"id":456,"status":8,"sort":456,"label":1242,"hidden":15,"created_on":944,"icon":1263,"translations":1264},{"id":1244},[1265,1266,1267,1268],{"id":456,"languages_code":925,"label":1242},{"id":336,"languages_code":927,"label":1248},{"id":1250,"languages_code":930,"label":1251},{"id":1253,"languages_code":933,"label":1242},[1270,1276,1286,1293],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1271},[1272,1273,1274,1275],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1277},[1278,1279,1280,1281,1282,1283,1284,1285],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1287},[1288,1289,1290,1291,1292],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1294},[1295,1296,1297,1298,1299],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1302},[1303,1304,1305,1306,1307],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1309],{"id":332,"status":8,"created_on":1310,"sort":7,"slug":1311,"label":515,"on_faq_index":15},"2022-06-10T09:49:33.000Z","javascript-i18n-localization",[1313],{"languages_code":925,"name":515,"slug":514,"description":1231,"support_type":1233,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1233,"tile_description":1234,"id":441,"platforms_id":441,"docs_link":1232},{"id":286,"status":8,"created_on":1229,"modified_on":1315,"name":522,"slug":521,"description":1316,"docs_link":908,"priority":7,"has_sdk":15,"sort":54,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1317,"show_in_spa":17,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"is_enterprise":15,"is_popular":17,"primary_use_case":1320,"hierarchy_handling":1321,"best_for":1322,"file_extension":1323,"format_code_example":1324,"format_to_extension":1325,"upload_features":1326,"icon":1327,"meta_image":1328,"primary_tag":1330,"tags":1341,"integration_methods":1349,"recommended_methods":1380,"default_integration_method":1381,"faq_categories":1388,"translations":1391,"platforms_id":286},"2025-10-14T11:22:29.000Z","Online JSON translator you will love. Comfortable JSON language files editor with powerful CLI under your fingers for continuous localization.","Advanced format support","{Objectively the best}","Translate any JSON files with Localazy, with the best in class plural and array support.","Used for structured data storage and APIs","Uses key-value pairs","Web & mobile apps, APIs",".json","```\n{\n  \"parent\": {\n    \"child\": {\n      \"another_nested_level\": \"All is supported.\"\n    }\n  }\n}\n```",{"json":521},[],{"id":524},{"id":1329},"8d614c20-667e-4bee-a64d-7d7ce9c0ee0a",{"id":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1332,"translations":1334},"File formats",{"id":1333},"ab7c8f89-dcce-45ab-9e21-8605aef289c3",[1335,1336,1338,1340],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},"Formatos de archivo",{"id":352,"languages_code":930,"label":1339},"Formáty souborů",{"id":445,"languages_code":933,"label":1331},[1342],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1343,"translations":1344},{"id":1333},[1345,1346,1347,1348],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1350,1356,1366,1373],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1351},[1352,1353,1354,1355],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1357},[1358,1359,1360,1361,1362,1363,1364,1365],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1367},[1368,1369,1370,1371,1372],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1374},[1375,1376,1377,1378,1379],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1382},[1383,1384,1385,1386,1387],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1389],{"id":291,"status":8,"created_on":1390,"sort":7,"slug":521,"label":522,"on_faq_index":15},"2022-06-10T10:49:07.000Z",[1392],{"languages_code":925,"name":522,"slug":521,"description":1316,"support_type":1317,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1318,"tile_description":1319,"id":286,"platforms_id":286,"docs_link":908},{"id":365,"status":8,"created_on":1229,"modified_on":1394,"name":529,"slug":528,"description":1395,"docs_link":1396,"priority":7,"has_sdk":15,"sort":365,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1397,"show_in_spa":15,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"is_enterprise":15,"is_popular":17,"primary_use_case":1400,"hierarchy_handling":1401,"best_for":1402,"file_extension":1403,"format_code_example":1404,"format_to_extension":1405,"upload_features":1407,"icon":1408,"meta_image":1409,"primary_tag":1411,"tags":1418,"integration_methods":1440,"recommended_methods":1471,"default_integration_method":1472,"faq_categories":1479,"translations":1480,"platforms_id":365},"2025-07-03T14:28:31.000Z","XLIFF is meant for localization. Enjoy Localazy - an online XLIFF editor for your translation management. Integrate your XLIFF files with Localazy to achieve true continuous localization and translate XLIFF files on autopilot.","\u002Fdocs\u002Fcli\u002Fxliff-12-format","File format support","Meant for localization","XLIFF stands for XML Localization Interchange File Format - and Localazy is the best way to manage XLIFF files.","Used in translation pipelines","XML-based exchange format","Translation & software",".xliff","```\n\u003Ctrans-unit id=\"localazy_message\">\n    \u003Csource>Go international, today. With Localazy.\u003C\u002Fsource>\n\u003C\u002Ftrans-unit>\n```",{"xliff":1406},"xlf",[],{"id":531},{"id":1410},"889970a6-cce8-4055-b96a-9c3f292aa67f",{"id":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1412,"translations":1413},{"id":1333},[1414,1415,1416,1417],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1419,1426,1433],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1420,"translations":1421},{"id":1333},[1422,1423,1424,1425],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1427,"translations":1428},{"id":1333},[1429,1430,1431,1432],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1434,"translations":1435},{"id":1333},[1436,1437,1438,1439],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1441,1447,1457,1464],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1442},[1443,1444,1445,1446],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1448},[1449,1450,1451,1452,1453,1454,1455,1456],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1458},[1459,1460,1461,1462,1463],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1465},[1466,1467,1468,1469,1470],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1473},[1474,1475,1476,1477,1478],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],[1481],{"languages_code":925,"name":529,"slug":528,"description":1395,"support_type":1397,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1398,"tile_description":1399,"id":365,"platforms_id":365,"docs_link":1396},{"id":54,"status":8,"created_on":1483,"modified_on":1483,"name":1484,"slug":1485,"description":1486,"docs_link":1487,"priority":7,"has_sdk":15,"sort":108,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1397,"show_in_spa":17,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":15,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"is_enterprise":15,"is_popular":17,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":1490,"upload_features":1491,"icon":1492,"meta_image":1494,"primary_tag":1496,"tags":1503,"integration_methods":1531,"recommended_methods":1562,"default_integration_method":1563,"faq_categories":1570,"translations":1571,"platforms_id":54},"2026-05-21T20:49:09.000Z","PO","po","Edit .po and .pot files with your team, automate translation with AI, and ship faster.","\u002Fdocs\u002Fcli\u002Fpo-format","Seamless integration","Upload, edit and translate PO files with Localazy.",{"po":1485},[],{"id":1493},"25f317fe-0c10-4f0b-92cd-f80d1f3c6a67",{"id":1495},"490022f9-d91a-4e1a-9e79-db374ec997c2",{"id":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1497,"translations":1498},{"id":1333},[1499,1500,1501,1502],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1504,1511,1521],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1505,"translations":1506},{"id":1333},[1507,1508,1509,1510],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":261,"status":8,"sort":261,"label":1512,"hidden":17,"created_on":944,"icon":7,"translations":1513},"C++",[1514,1515,1517,1519],{"id":261,"languages_code":925,"label":1512},{"id":1516,"languages_code":927,"label":1512},135,{"id":1518,"languages_code":930,"label":1512},140,{"id":1520,"languages_code":933,"label":1512},144,{"id":365,"status":8,"sort":108,"label":1522,"hidden":17,"created_on":944,"icon":7,"translations":1523},"Gettext",[1524,1525,1527,1529],{"id":365,"languages_code":925,"label":1522},{"id":1526,"languages_code":927,"label":1522},101,{"id":1528,"languages_code":930,"label":1522},106,{"id":1530,"languages_code":933,"label":1522},111,[1532,1538,1548,1555],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1533},[1534,1535,1536,1537],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1539},[1540,1541,1542,1543,1544,1545,1546,1547],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1549},[1550,1551,1552,1553,1554],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1556},[1557,1558,1559,1560,1561],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1564},[1565,1566,1567,1568,1569],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],[1572],{"languages_code":925,"name":1484,"slug":1485,"description":1486,"support_type":1397,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1488,"tile_description":1489,"id":54,"platforms_id":54,"docs_link":1487},{"id":113,"status":8,"created_on":1229,"modified_on":1574,"name":1575,"slug":1576,"description":1577,"docs_link":1578,"priority":7,"has_sdk":15,"sort":89,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1397,"show_in_spa":17,"is_file_format":17,"meta_title":7,"meta_description":7,"featured_on_web":15,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"is_enterprise":15,"is_popular":15,"primary_use_case":1581,"hierarchy_handling":1582,"best_for":1583,"file_extension":1584,"format_code_example":1585,"format_to_extension":1586,"upload_features":1587,"icon":1588,"meta_image":1589,"primary_tag":1591,"tags":1598,"integration_methods":1616,"recommended_methods":1647,"default_integration_method":1648,"faq_categories":1655,"translations":1658,"platforms_id":113},"2025-10-02T08:32:44.000Z","RESX","resx","Quickly translate and manage your RESX files with Localazy or integrate Localazy with your .NET project and enjoy a fully automated localization process. ","\u002Fdocs\u002Fcli\u002Fresx-format",".NET localization","Translate .NET projects using RESX files and Localazy.","Standard format for Windows\u002F.NET localization","Flat key-value structure",".NET applications",".resx","```\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Croot>\n  \u003Cdata name=\"localazy_message\" xml:space=\"preserve\">\n    \u003Cvalue>Go international, today. With Localazy.\u003C\u002Fvalue>\n  \u003C\u002Fdata>\n\u003C\u002Froot>\n```",{"resx":1576},[],{"id":1493},{"id":1590},"1f07bf83-9363-47d6-b21b-a5121c0efaf6",{"id":22,"status":8,"sort":13,"created_on":944,"label":1331,"hidden":15,"icon":1592,"translations":1593},{"id":1333},[1594,1595,1596,1597],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},[1599,1606],{"id":22,"status":8,"sort":13,"label":1331,"hidden":15,"created_on":944,"icon":1600,"translations":1601},{"id":1333},[1602,1603,1604,1605],{"id":22,"languages_code":925,"label":1331},{"id":221,"languages_code":927,"label":1337},{"id":352,"languages_code":930,"label":1339},{"id":445,"languages_code":933,"label":1331},{"id":108,"status":8,"sort":113,"label":1607,"hidden":17,"created_on":944,"icon":7,"translations":1608},"C#",[1609,1610,1612,1614],{"id":108,"languages_code":925,"label":1607},{"id":1611,"languages_code":927,"label":1607},103,{"id":1613,"languages_code":930,"label":1607},108,{"id":1615,"languages_code":933,"label":1607},113,[1617,1623,1633,1640],{"id":22,"status":8,"sort":94,"label":655,"alternative_label":7,"slug":659,"description":954,"documentation_link":955,"loc_icon":659,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1618},[1619,1620,1621,1622],{"id":22,"languages_code":925,"label":655,"description":954,"slug":659},{"id":959,"languages_code":927,"label":655,"description":960,"slug":659},{"id":666,"languages_code":933,"label":655,"description":962,"slug":659},{"id":436,"languages_code":930,"label":655,"description":964,"slug":659},{"id":12,"status":8,"sort":13,"label":966,"alternative_label":7,"slug":967,"description":968,"documentation_link":969,"loc_icon":970,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1624},[1625,1626,1627,1628,1629,1630,1631,1632],{"id":12,"languages_code":925,"label":966,"description":968,"slug":967},{"id":154,"languages_code":927,"label":974,"description":975,"slug":7},{"id":352,"languages_code":933,"label":966,"description":968,"slug":967},{"id":319,"languages_code":930,"label":978,"description":979,"slug":7},{"id":269,"languages_code":927,"label":981,"description":982,"slug":967},{"id":278,"languages_code":933,"label":966,"description":968,"slug":967},{"id":558,"languages_code":930,"label":978,"description":979,"slug":967},{"id":986,"languages_code":987,"label":988,"description":989,"slug":7},{"id":5,"status":8,"sort":22,"label":991,"alternative_label":992,"slug":993,"description":994,"documentation_link":995,"loc_icon":996,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1634},[1635,1636,1637,1638,1639],{"id":5,"languages_code":925,"label":991,"description":994,"slug":993},{"id":77,"languages_code":927,"label":1000,"description":1001,"slug":7},{"id":248,"languages_code":933,"label":991,"description":994,"slug":993},{"id":1004,"languages_code":930,"label":1005,"description":1006,"slug":7},{"id":1008,"languages_code":987,"label":1009,"description":1010,"slug":7},{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1641},[1642,1643,1644,1645,1646],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[],{"id":26,"status":8,"sort":12,"label":1012,"alternative_label":643,"slug":411,"description":1013,"documentation_link":1014,"loc_icon":411,"is_official_plugin":15,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1649},[1650,1651,1652,1653,1654],{"id":26,"languages_code":925,"label":1012,"description":1013,"slug":411},{"id":66,"languages_code":927,"label":1018,"description":1019,"slug":411},{"id":239,"languages_code":933,"label":1012,"description":1013,"slug":411},{"id":311,"languages_code":930,"label":1022,"description":1023,"slug":411},{"id":1025,"languages_code":987,"label":1026,"description":1027,"slug":7},[1656],{"id":221,"status":8,"created_on":1657,"sort":7,"slug":1576,"label":1575,"on_faq_index":7},"2022-08-01T16:44:06.000Z",[1659],{"languages_code":925,"name":1575,"slug":1576,"description":1577,"support_type":1397,"meta_title":7,"meta_description":7,"marketing_subtitle":910,"tile_subtitle":1579,"tile_description":1580,"id":113,"platforms_id":113,"docs_link":1578},{"id":535,"status":8,"created_on":1661,"modified_on":1662,"name":538,"slug":537,"description":1663,"docs_link":1664,"priority":7,"has_sdk":7,"sort":536,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1665,"show_in_spa":17,"is_file_format":7,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"is_enterprise":15,"is_popular":17,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":7,"upload_features":7,"icon":1667,"meta_image":1668,"primary_tag":1670,"tags":1682,"integration_methods":1726,"recommended_methods":1746,"default_integration_method":1747,"faq_categories":1754,"translations":1757,"platforms_id":535},"2022-06-16T09:08:11.000Z","2026-04-27T18:16:54.000Z","Enjoy seamless integration of Strapi & Localazy and translate your website efficiently. Download the official Localazy plugin in the Strapi Marketplace to get started!","\u002Fdocs\u002Fstrapi\u002Fstrapi-plugin-introduction","Localization Plugin","Localize your Strapi website with our official localization plugin. Easy setup and installation.",{"id":540},{"id":1669},"5995b721-a2ea-487e-ad4b-298a489bbd24",{"id":286,"status":8,"sort":216,"created_on":944,"label":1671,"hidden":15,"icon":1672,"translations":1674},"CMS",{"id":1673},"1172a655-928c-4594-9263-d8afdfd9cd79",[1675,1676,1678,1680],{"id":286,"languages_code":925,"label":1671},{"id":1677,"languages_code":927,"label":1671},73,{"id":1679,"languages_code":930,"label":1671},81,{"id":1681,"languages_code":933,"label":1671},84,[1683,1695,1707,1714],{"id":59,"status":8,"sort":253,"label":1684,"hidden":15,"created_on":944,"icon":7,"translations":1685},"Multilingual SEO",[1686,1687,1690,1693],{"id":59,"languages_code":925,"label":1684},{"id":1688,"languages_code":927,"label":1689},89,"SEO multilingüe",{"id":1691,"languages_code":930,"label":1692},94,"Vícejazyčné SEO",{"id":1694,"languages_code":933,"label":1684},99,{"id":406,"status":8,"sort":406,"label":165,"hidden":15,"created_on":944,"icon":1696,"translations":1698},{"id":1697},"e782ed3f-d954-45ca-8b17-5bf5fe95f30a",[1699,1700,1703,1705],{"id":406,"languages_code":925,"label":165},{"id":1701,"languages_code":927,"label":1702},132,"Comercio electrónico",{"id":1704,"languages_code":930,"label":165},137,{"id":1706,"languages_code":933,"label":165},142,{"id":286,"status":8,"sort":216,"label":1671,"hidden":15,"created_on":944,"icon":1708,"translations":1709},{"id":1673},[1710,1711,1712,1713],{"id":286,"languages_code":925,"label":1671},{"id":1677,"languages_code":927,"label":1671},{"id":1679,"languages_code":930,"label":1671},{"id":1681,"languages_code":933,"label":1671},{"id":5,"status":8,"sort":94,"label":1715,"hidden":15,"created_on":944,"icon":1716,"translations":1718},"Marketing tools",{"id":1717},"098fe6a4-dd2e-42d8-937e-2d8121e6e266",[1719,1720,1723,1725],{"id":5,"languages_code":925,"label":1715},{"id":1721,"languages_code":927,"label":1722},43,"Herramientas de marketing",{"id":299,"languages_code":930,"label":1724},"Marketingové nástroje",{"id":378,"languages_code":933,"label":1715},[1727],{"id":137,"status":8,"sort":7,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1734},"Official Strapi Plugin","Official Plugin","official-strapi-plugin","Our developers maintain an official Strapi localization plugin. Start in a few clicks!","\u002Fdocs\u002Fstrapi","localazy-box",[1735,1736,1739,1740,1743],{"id":137,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":7},"Complemento Oficial de Strapi","Nuestros desarrolladores mantienen un complemento oficial de localización de Strapi. ¡Empiece en unos pocos clics!",{"id":369,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":445,"languages_code":930,"label":1741,"description":1742,"slug":7},"Oficiál Plugin Strapi","Naši vývojáři udržují a neustále vylepšují oficiální lokalizační plugin Strapi. Začněte několika kliknutími!",{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":7},"Offizielles Strapi-Plugin","Unsere Entwickler pflegen ein offizielles Strapi-Lokalisierungs-Plugin. Starten Sie mit ein paar Klicks!",[],{"id":137,"status":8,"sort":7,"label":1728,"alternative_label":1729,"slug":1730,"description":1731,"documentation_link":1732,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1748},[1749,1750,1751,1752,1753],{"id":137,"languages_code":925,"label":1728,"description":1731,"slug":1730},{"id":1721,"languages_code":927,"label":1737,"description":1738,"slug":7},{"id":369,"languages_code":933,"label":1728,"description":1731,"slug":1730},{"id":445,"languages_code":930,"label":1741,"description":1742,"slug":7},{"id":1688,"languages_code":987,"label":1744,"description":1745,"slug":7},[1755],{"id":66,"status":8,"created_on":1756,"sort":7,"slug":537,"label":538,"on_faq_index":7},"2022-06-16T09:24:13.000Z",[1758],{"languages_code":925,"name":538,"slug":537,"description":1663,"support_type":1665,"meta_title":7,"meta_description":7,"marketing_subtitle":1665,"tile_subtitle":1665,"tile_description":1666,"id":535,"platforms_id":535,"docs_link":1664},{"id":319,"status":8,"created_on":1229,"modified_on":1760,"name":545,"slug":544,"description":7,"docs_link":1761,"priority":7,"has_sdk":15,"sort":311,"highlighted":15,"in_menu":17,"changefreq":7,"support_type":1762,"show_in_spa":17,"is_file_format":15,"meta_title":7,"meta_description":7,"featured_on_web":17,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"is_enterprise":15,"is_popular":17,"primary_use_case":7,"hierarchy_handling":7,"best_for":7,"file_extension":7,"format_code_example":7,"format_to_extension":7,"upload_features":1766,"icon":1767,"meta_image":1768,"primary_tag":1770,"tags":1783,"integration_methods":1791,"recommended_methods":1804,"default_integration_method":1805,"faq_categories":1811,"translations":1812,"platforms_id":319},"2024-12-20T15:00:22.000Z","\u002Fdocs\u002Fintegrations\u002Fquick-start-figma","plugin","Figma plugin","Localization plugin","Quickly translate your Figma designs and seamlessly reuse the translations during the development of your project.",[],{"id":547},{"id":1769},"7573fed6-8817-4cb4-84d2-be327e6c4891",{"id":12,"status":8,"sort":147,"created_on":944,"label":1771,"hidden":15,"icon":1772,"translations":1774},"Design tools",{"id":1773},"1053d863-b690-4fbd-aadf-dbf2ba282768",[1775,1776,1779,1782],{"id":12,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},42,"Herramientas de diseño",{"id":1780,"languages_code":930,"label":1781},49,"Nástroje pro návrh",{"id":428,"languages_code":933,"label":1771},[1784],{"id":12,"status":8,"sort":147,"label":1771,"hidden":15,"created_on":944,"icon":1785,"translations":1786},{"id":1773},[1787,1788,1789,1790],{"id":12,"languages_code":925,"label":1771},{"id":1777,"languages_code":927,"label":1778},{"id":1780,"languages_code":930,"label":1781},{"id":428,"languages_code":933,"label":1771},[1792],{"id":147,"status":8,"sort":7,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":595,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1795},"official-plugin","Our developers maintain an official plugin for this integration. Start in a few clicks!",[1796,1797,1800,1801],{"id":147,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":142,"languages_code":927,"label":1798,"description":1799,"slug":7},"Plugin Oficial","Nuestros desarrolladores mantienen un plugin oficial para esta integración. ¡Empiece con unos pocos clics!",{"id":132,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":332,"languages_code":930,"label":1802,"description":1803,"slug":7},"Oficiální Plugin","Naši vývojáři udržují a neustále vylepšují oficiální plugin pro tuto integraci. Začněte několika kliknutími!",[],{"id":147,"status":8,"sort":7,"label":1729,"alternative_label":1729,"slug":1793,"description":1794,"documentation_link":595,"loc_icon":1733,"is_official_plugin":17,"is_universal_plugin":15,"universal_plugin_vendor":7,"translations":1806},[1807,1808,1809,1810],{"id":147,"languages_code":925,"label":1729,"description":1794,"slug":1793},{"id":142,"languages_code":927,"label":1798,"description":1799,"slug":7},{"id":132,"languages_code":933,"label":1729,"description":1794,"slug":1793},{"id":332,"languages_code":930,"label":1802,"description":1803,"slug":7},[],[1813],{"languages_code":925,"name":545,"slug":544,"description":7,"support_type":1762,"meta_title":7,"meta_description":7,"marketing_subtitle":1763,"tile_subtitle":1764,"tile_description":1765,"id":319,"platforms_id":319,"docs_link":1761},{"id":1815,"owner":1816,"created_by":7,"sort":7,"title":1821,"slug":1822,"modified_on":764,"created_on":1823,"pinned":15,"badge":7,"priority":1824,"main_image":1825,"status":8,"tags":1826,"dictionary":1834,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"69d78a237ab1270001eddabf",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"606c233dcf7b6a0001d1da93","Petr Hodný","petr-hodny","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fpetr.png","Translation API: Translate your content on the fly with Localazy AI!","translation-api-translate-your-content-on-the-fly-with-localazy-ai","2026-04-24T09:27:26.000+02:00","0.7","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F04\u002FLocalazy-AI-translation-api.png",[1827,1829,1832],{"id":319,"created_on":1828,"status":8,"label":655,"slug":659,"on_index_page":15},"2026-05-31 17:53:11",{"id":269,"created_on":1828,"status":8,"label":1830,"slug":1831,"on_index_page":17},"AI","ai",{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},"localization",[],0,{"id":1837,"owner":1838,"created_by":7,"sort":7,"title":1839,"slug":1840,"modified_on":764,"created_on":1841,"pinned":15,"badge":7,"priority":1824,"main_image":1842,"status":8,"tags":1843,"dictionary":1850,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"69ea1abb7ab1270001ede902",{"id":1817,"first_name":1818,"last_name":764,"slug":1819,"avatar":1820},"You can just build things. But should you? The build vs. buy debate in localization","build-vs-buy-in-localization-you-can-build-things-but-should-you","2026-05-25T08:43:00.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F05\u002Flocalazy-Vibe-coding.png",[1844,1845,1849],{"id":269,"created_on":1828,"status":8,"label":1830,"slug":1831,"on_index_page":17},{"id":1846,"created_on":1828,"status":8,"label":1847,"slug":1848,"on_index_page":15},646,"Business Development","business-development",{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},[],{"post":1852,"relatedPosts":2028,"banner":2087},{"id":1853,"owner":1854,"created_by":7,"sort":7,"title":1859,"slug":1860,"modified_on":1861,"created_on":1862,"pinned":15,"badge":7,"priority":1824,"main_image":1863,"status":8,"tags":1864,"dictionary":1871,"reading_time":137,"excerpt":1948,"og_title":764,"og_description":764,"og_image":764,"content":1949,"meta_title":764,"meta_description":764,"canonical":764,"cta":1950,"fullGhostPost":1958},"60f7d1a36f8ebe0001bd8219",{"id":1855,"first_name":1856,"last_name":764,"slug":1857,"avatar":1858},"6092822ecf7b6a0001d1dab2","Rafał Rybnik","rafal-rybnik","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Frafal.png","How to make a multi-language application in C","make-multi-language-application-in-c-gettext-localazy","2026-04-16T16:29:24.000+02:00","2021-08-13T10:55:51.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F08\u002Fmake-a-multi-lang-app-in-C.png",[1865,1868,1869],{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1867,"on_index_page":15},"HowTo","howto",{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},{"id":319,"created_on":1828,"status":8,"label":1870,"slug":1870,"on_index_page":17},"i18n",[1872,1894,1906,1915,1930,1940],{"id":1688,"status":8,"owner":1873,"created_on":1874,"title":1875,"excerpt":1876,"content":1877,"slug":1878,"meta_title":7,"meta_description":1879,"canonical":7,"related_terms":1880},"2bac48a8-b362-482f-b574-3bc71dca4c5b","2022-03-17T12:22:55.000Z","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.",[1881,1882,1884,1886,1888,1891],{"id":5,"slug":1833},{"id":12,"slug":1883},"l10n",{"id":319,"slug":1885},"externalized-string",{"id":1887,"slug":514},75,{"id":1889,"slug":1890},79,"internationalization",{"id":1892,"slug":1893},83,"python",{"id":22,"status":8,"owner":1873,"created_on":1895,"title":287,"excerpt":1896,"content":1897,"slug":1898,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1899},"2022-03-17T12:22:54.000Z","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.","translation",[1900,1901,1902,1903,1905],{"id":5,"slug":1833},{"id":147,"slug":333},{"id":244,"slug":316},{"id":154,"slug":1904},"translation-management-system-tms",{"id":1889,"slug":1890},{"id":154,"status":8,"owner":1873,"created_on":1874,"title":1907,"excerpt":1908,"content":1909,"slug":1904,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1910},"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.",[1911,1912,1914],{"id":147,"slug":333},{"id":216,"slug":1913},"cat-tool",{"id":244,"slug":316},{"id":244,"status":8,"owner":1873,"created_on":1916,"title":1917,"excerpt":1918,"content":1919,"slug":316,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1920},"2026-05-12T07:09:22.000Z","Machine translation (MT)","The process of translating using computational linguistics.","A machine translation engine is a software tool that translates a text from one language to another without the help of human translators.\n\nMachine translation, also known as MT, is widely used as the first round of translations and is frequently very effective for short strings. However, it can produce unsatisfactory results when context knowledge is required, and thus, a human review is always advised.\n\n### 💬 Methods used in machine translation\n\nMachine translation engines recently experienced huge improvements related to the advanced use of neural networks, but they generally rely on these different methods:\n\n* [Statistical machine translation (SMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fstatistical-machine-translation\u002F \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fstatistical-machine-translation\u002F\")\n* [Example-based machine translation (EBMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fexample-based-machine-translation \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fexample-based-machine-translation\")\n* [Hybrid machine translation (HMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fhybrid-machine-translation \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fhybrid-machine-translation\")\n* [Neural machine translation (NMT)](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fneural-machine-translation\u002F \"https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fneural-machine-translation\u002F\")\n\nNeural machine translation (used by [AI-powered translation](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fai-powered-translation) engines) is the most sophisticated type of instant translation today. It uses machine learning to improve its translation capabilities. As the engine translates more text with each request, the better results it produces with time by learning. Most instant translation services use this technology.\n\n### 🔍 What's the difference between HAMT and MAHT?\n\nWithin the realm of machine translation, it’s important to distinguish between **Human-Assisted Machine Translation (HAMT)** and **Machine-Assisted Human Translation (MAHT)**:\n\n* [**Human-Assisted Machine Translation (HAMT)**](\u002Fdictionary\u002Fhuman-assisted-mt): This process involves a human reviewing translations generated by machine translation (MT) engines. It is also known as MT plus post-editing and\u002For pre-editing. The machine handles the initial translation, which is then edited by a human to improve accuracy and context. This approach is useful for projects with repetitive content and where budget or time constraints are significant.\n* [**Machine-Assisted Human Translation (MAHT)**](\u002Fdictionary\u002Fmaht): In this method, human translators use computer software to aid their work. Translators receive machine translation suggestions, but they decide how to use them. This approach allows for high translation accuracy while benefiting from features like translation glossaries and memories, which enhance the efficiency and consistency of the translation process.\n\n### 🦾 MT engines available in Localazy \n\nLocalazy users can use the most popular and advanced [MT engines](https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fmachine-translation \"https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Fmachine-translation\") to translate their content:\n\n* Amazon Translate (available for free)\n* Google Translate\n* DeepL\n* Azure Translator\n* OpenAI (ChatGPT), with your own API key\n\n> *Users can unlock different engines depending on the plan they buy. See our [pricing](https:\u002F\u002Flocalazy.com\u002Fpricing) and [docs](https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fadditional-mt-engines?srsltid=AfmBOoo--lURSBHDiHEoe3rYL3xSQHaZcTsl6kd7wwUYRGC-sGTTmG94 \"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fadditional-mt-engines?srsltid=AfmBOoo--lURSBHDiHEoe3rYL3xSQHaZcTsl6kd7wwUYRGC-sGTTmG94\") for more details.*\n\n### 📚 Additional resources:\n\n* [What is machine translation?](https:\u002F\u002Fwww.gala-global.org\u002Fwhat-machine-translation)\n* [History of machine translation](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHistory_of_machine_translation)",[1921,1923,1925,1927],{"id":441,"slug":1922},"maht",{"id":1681,"slug":1924},"mtpe-machine-translation-post-editing",{"id":1615,"slug":1926},"deepl",{"id":1928,"slug":1929},136,"human-assisted-mt",{"id":5,"status":8,"owner":1873,"created_on":1895,"title":217,"excerpt":1931,"content":1932,"slug":1833,"meta_title":7,"meta_description":7,"canonical":7,"related_terms":1933},"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.",[1934,1935,1936,1938,1939],{"id":5,"slug":1833},{"id":22,"slug":1898},{"id":101,"slug":1937},"gilt",{"id":154,"slug":1904},{"id":1889,"slug":1890},{"id":1694,"status":8,"owner":1873,"created_on":1874,"title":1941,"excerpt":1942,"content":1943,"slug":1944,"meta_title":764,"meta_description":764,"canonical":764,"related_terms":1945},"GTK","GTK, also known as GIMP ToolKit, is an open-source toolkit for creating graphical user interfaces (GUIs).","GTK offers developers a complete set of UI elements to help with prototyping and development of Linux applications in various languages, including C, [JavaScript](\u002Fdictionary\u002Fjavascript), Perl or [Python](\u002Fdictionary\u002Fpython).\n\nYou can learn more on the [GTK official website](https:\u002F\u002Fwww.gtk.org\u002F).","gtk",[1946,1947],{"id":1887,"slug":514},{"id":1892,"slug":1893},"Learn how to make a multilingual application in C programming language with gnu-gettext for i18n and Localazy. ","\u003Cp>Typically, when you start developing a new app, its interface is in a specific language, perhaps English, if you want to reach an international audience. By \u003Ca href=\"\u002Fdictionary\u002Ftranslation\">translating\u003C\u002Fa> your app into other human languages, you can increase the number of people who can install, use, and recommend it.\u003C\u002Fp>\u003Cp>A few weeks ago, I started learning the C programming language. It is rather challenging to switch the C’s way of thinking about software engineering. While learning how to work on strings, I wondered how to solve the topic of multilingual applications and \u003Ca href=\"\u002Fdictionary\u002Flocalization\">localization\u003C\u002Fa>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-24.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1340\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-24.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-24.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-24.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-24.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>Unless stated otherwise, all pictures in the article are by the author.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"translate-gtk-app-using-gettext-and-localazy\">🎈 Translate GTK app using Gettext and Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#translate-gtk-app-using-gettext-and-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>In this article, I will show you how to use \u003Ccode>Gettext\u003C\u002Fcode> functions to translate a terminal application and a GUI (made using \u003Ca href=\"\u002Fdictionary\u002Fgtk\">GTK\u003C\u002Fa>). I will show you how to test this solution using environment variables. And finally, I will show you how to manage multiple translations and even how to help yourself with \u003Ca href=\"\u002Fdictionary\u002Fmachine-translation\">machine translations\u003C\u002Fa> using \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\" rel=\"noopener\">Localazy\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>To understand the article, all you need is a basic knowledge of C and possibly some familiarity with the make tool.\u003C\u002Fp>\u003Ch4 id=\"source-code\">Source code\u003C\u002Fh4>\u003Cp>Repository prepared for the article:\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffischerbach\u002FC-localization\" rel=\"noopener\">https:\u002F\u002Fgithub.com\u002Ffischerbach\u002FC-localization\u003C\u002Fa>\u003C\u002Fp>\u003Cp>Every section has its own branch. \u003Ccode>master\u003C\u002Fcode> branch contains final source codes.\u003C\u002Fp>\u003Ch2 id=\"terminal-application\">⌨️ Terminal application \u003Ca class=\"markdownit-header-anchor\" href=\"#terminal-application\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Let’s tackle a simple terminal application first.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F41f21b64635ac7383a31ebd97dd82a69.js\">\u003C\u002Fscript>\n                                                                                                                         \n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>The source code is littered with several strings containing messages. The first thought is to collect them into an array.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F43f5914d17e71036ab99b83c0f97e029.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Now, they could be easily translated and stored in separate variables. Then we could use conditional compilation and pass the appropriate language to the build tool:\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F280ad9eb668743b0a2415eea589e00b7.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>This solution has several drawbacks.\u003C\u002Fp>\u003Col>\u003Cli>Firstly, already at the compilation stage, you have to choose the language version. The resulting binary will only contain one language. In environments with limited resources, e.g., embedded this may make sense. But the end-user then has to download the version that is right for them.\u003C\u002Fli>\u003Cli>Secondly, this is easy to manage as long as there are only a few fixed strings. But if the software continues to be developed, the number could likely increase quickly. Also, some of the labels may stop being used. Then they occupy memory unnecessarily.\u003C\u002Fli>\u003Cli>Finally, thirdly, it reduces the readability of the code. What is more readable?\u003C\u002Fli>\u003C\u002Fol>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fdf3b52a9de378d70976e94b8a4c7bc0b.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>You can try to remedy this by using a hashtable, but this will be a bit of reinventing the wheel and will not solve the previously mentioned limits. Fortunately, there is a ready-made solution — the \u003Ccode>Gettext\u003C\u002Fcode> library and tools.\u003C\u002Fp>\u003Ch2 id=\"gettext\">📑 Gettext \u003Ca class=\"markdownit-header-anchor\" href=\"#gettext\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\" rel=\"noopener\">GNU gettext\u003C\u002Fa> is a universal set of tools for producing multi-lingual messages. It provides a framework to support translated message strings with minimal effort. It supports many languages.\u003C\u002Fp>\u003Cblockquote>In a previous article I described how to use \u003Ca href=\"\u002Fdictionary\u002Fgnu-gettext\">GNU gettext\u003C\u002Fa> with Python: \u003Cstrong>\u003Ca href=\"\u002Fblog\u002Fhow-to-build-a-multi-language-dashboard-with-streamlit\">How to build a multi-language dashboard with Streamlit\u003C\u002Fa>\u003C\u002Fstrong>\u003C\u002Fblockquote>\u003Cp>The usage pattern is very simple.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-25.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"700\" height=\"907\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-25.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-25.png 700w\">\u003C\u002Ffigure>\u003Cp>First, we need to modify the source code and mark strings to be translated.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fdb4f3249da539c0deac149aaf5c8aea0.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Note that we added a preprocessor macro to shorten the \u003Ccode>gettext\u003C\u002Fcode> function into \u003Ccode>_\u003C\u002Fcode>. This is a common way to mark localized strings. Next, we generate a file from the application source code containing the strings marked for translation.\u003C\u002Fp>\u003Cpre>\u003Ccode>xgettext -k_ -o locales\u002Fbase.pot — language=C do_nothing.c\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Normally \u003Ccode>xgettext\u003C\u002Fcode> seeks for \u003Ccode>gettext\u003C\u002Fcode> function surrounding texts, so we need to use \u003Ccode>-k_\u003C\u002Fcode> option to determine a new name. The output is a template \u003Ca href=\"\u002Fpot\">POT (Portable Object Template) file\u003C\u002Fa>.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 360px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 300px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fa170d3f63b138a1cebbd527fc2fe64d0.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>It contains every localized text. We use it to create files containing other language versions.\u003C\u002Fp>\u003Cpre>\u003Ccode>msginit --input=locales\u002Fbase.pot --locale=pl \n--output=locales\u002Fpl\u002Fbase.po\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>These are \u003Ca href=\"\u002Fpo\">PO (Portable Object) files\u003C\u002Fa> and contain translated texts.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fb110624041146790e0858b679d5e97c5.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Finally, to use translations in our application, these PO files are converted to MO (Machine Object) files.\u003C\u002Fp>\u003Cpre>\u003Ccode>msgfmt --output-file=locales\u002Fpl\u002FLC_MESSAGES\u002Fbase.mo \nlocales\u002Fpl\u002Fbase.po\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This may sound complicated, but it basically boils down to using a few basic commands, which can then be built into the \u003Ccode>Makefile\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>Note the preservation of the directory structure (especially \u003Ccode>LC_MESSAGES\u003C\u002Fcode>):\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F1df9611ae7249e9cc622651f09bb0137.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>\u003Cstrong>\u003Cstrong>The source code for this section is in the \u003C\u002Fstrong>\u003C\u002Fstrong>\u003Ccode>\u003Cstrong>\u003Cstrong>step-1\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fcode>\u003Cstrong>\u003Cstrong> branch.\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>As an exercise, fork repository, try to create translation to your native language (and maybe create pull request 😉).\u003C\u002Fp>\u003Chr>\u003Ch3 id=\"testing\">Testing \u003Ca class=\"markdownit-header-anchor\" href=\"#testing\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>To test our solution in the terminal, we need to set \u003Ccode>locale\u003C\u002Fcode> variables. The UNIX platforms use the environment variables:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ccode>LANG\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>LANGUAGE\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>LC_COLLATE\u003C\u002Fcode>, \u003Ccode>LC_CTYPE\u003C\u002Fcode>, \u003Ccode>LC_MESSAGES\u003C\u002Fcode>, \u003Ccode>LC_MONETARY\u003C\u002Fcode>, \u003Ccode>LC_NUMERIC\u003C\u002Fcode>, \u003Ccode>LC_TIME\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>to determine which locale is to be used.\u003C\u002Fp>\u003Cp>When an application starts, it looks at the value of the LANG environment variable. You can temporarily change the locale in a terminal session by setting the LANG variable before the name of the output executable:\u003C\u002Fp>\u003Cpre>\u003Ccode>LANG=pl .\u002Fdo_nothing\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-26.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"818\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-26.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-26.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-26.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-26.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>As you can see, our application respects the user’s locale settings now.\u003C\u002Fp>\u003Ch2 id=\"gtk-20\">🖌️ GTK 2.0 \u003Ca class=\"markdownit-header-anchor\" href=\"#gtk-20\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>The next application we will look at has a GUI implemented using the GTK+2.0 library. Note that this is a fairly archaic version of GTK. However, our application is simple enough that it will even compile using the newer 3.0 version. Furthermore, in terms of translation, the process will be similar regardless of the library and version used.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Faf707169afe743fb5963456b47242429.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>The application has similar “functionality” to the previous terminal app, but with some graphical interface.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FJuv227dQtbY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Some lines may cause difficulties, e.g., HTML formatted label.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 160px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 100px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F32d1b26d5b6a74a3c50d19713658868d.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Using \u003Ccode>Gettext\u003C\u002Fcode> with \u003Ccode>GTK\u003C\u002Fcode> doesn’t differ much.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fa0e1ab3f135b82ffc095d5e53462db1f.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Glib provides a \u003Ccode>gi18n\u003C\u002Fcode> header file, which we include. Localized texts are marked exactly the same as in the previous example.\u003C\u002Fp>\u003Cp>Result:\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fhw-a46e9ykY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>The fantastic thing is that GTK also automatically translates the labels of built-in dialog window labels!\u003C\u002Fp>\u003Cp>\u003Cstrong>\u003Cstrong>The source code for this section is in the \u003C\u002Fstrong>\u003C\u002Fstrong>\u003Ccode>\u003Cstrong>\u003Cstrong>step-2\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fcode>\u003Cstrong>\u003Cstrong> branch.\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fp>\u003Chr>\u003Ch3 id=\"possible-problems\">Possible problems  \u003Ca class=\"markdownit-header-anchor\" href=\"#possible-problems\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>In the course of my work, I encountered a few problems that may be tricky.\u003C\u002Fp>\u003Ch4 id=\"charset-encoding\">Charset encoding\u003C\u002Fh4>\u003Cp>If your language uses an extended character set, remember to set UTF-8 (or another appropriate charset) in the PO files’ headers.\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fe4cbe6b4531cb174f192a7df71b83488\" rel=\"noopener\">https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fe4cbe6b4531cb174f192a7df71b83488\u003C\u002Fa>\u003C\u002Fp>\u003Ch4 id=\"proper-locale-directories%E2%80%99-structure\">Proper locale directories’ structure\u003C\u002Fh4>\u003Cp>\u003Cbr>It’s important to keep the directory structure understandable to \u003Ccode>Gettext\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>Especially the \u003Ccode>LC_MESSAGES\u003C\u002Fcode> subdirectory.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F1df9611ae7249e9cc622651f09bb0137.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Ch4 id=\"complicated-workflow\">Complicated workflow\u003C\u002Fh4>\u003Cp>Remembering all the commands that generate the translation files can be tedious, so in the \u003Ccode>step-3\u003C\u002Fcode> branch you will find simple bash scripts and \u003Ccode>Makefile\u003C\u002Fcode> modifications to automate this process.\u003C\u002Fp>\u003Ch4 id=\"need-for-regenerating-po-files-every-time\">Need for regenerating PO files every time\u003C\u002Fh4>\u003Cp>Be careful when re-generating PO files, because you may lose already translated parts. Merging new labels and their translations can be challenging. Therefore, in the next paragraph, you will learn about a web application that makes it as easy as possible to create new language versions.\u003C\u002Fp>\u003Chr>\u003Ch2 id=\"localazy\">🚩 Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\" rel=\"noopener\">Localazy\u003C\u002Fa> is an awesome piece of software that makes the usually awful translation experience bearable and even almost pleasure. It supports many frameworks and localization file formats and provides CLI tools for build automation. My favorite features are machine suggestions for translations and automagic management of changes in translated files.\u003C\u002Fp>\u003Cp>So let’s integrate our report with Localazy. First, \u003Ca href=\"\u002Fregister\">create a Localazy account\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Finstallation\" rel=\"noopener\">install Localazy CLI.\u003C\u002Fa> Then, create a new application.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-27.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1400\" height=\"942\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-27.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-27.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-27.png 1400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Make sure to set the App Type to Private app. If your app does not contain sensitive data, you can safely leave it Public. Then, select POT files from available file formats.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-28.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"700\" height=\"273\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-28.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-28.png 700w\">\u003C\u002Ffigure>\u003Cp>You will see a template configuration file \u003Ccode>localazy.json\u003C\u002Fcode>. Copy it to the \u003Ccode>gui-app\u003C\u002Fcode> main folder. Remember to modify the locales folder path. Now you can upload POT files into Localazy:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy upload\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-29.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1601\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-29.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-29.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-29.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-29.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-30.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"904\" height=\"280\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-30.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-30.png 904w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Then, go to your app in Localazy and add some new languages. After a while, you will see a list of phrases to translate in each language of your application.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-31.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"852\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-31.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-31.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-31.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-31.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>And the cherry on the top, a machine translation suggestions and previously used ones come with each phrase.\u003Cbr>\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-32.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1620\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-32.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-32.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-32.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-32.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Once all the translations have been accepted or created, you can download them into your application and re-generate binary MO files:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy download\nmake locales -B\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-33.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1601\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-33.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-33.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-33.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-33.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Result:\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fhw-a46e9ykY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-34.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1976\" height=\"612\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-34.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-34.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-34.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-34.png 1976w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>I’d say it’s quite acceptable.\u003C\u002Fp>\u003Chr>\u003Ch2 id=\"takeaways\">✔️ Takeaways \u003Ca class=\"markdownit-header-anchor\" href=\"#takeaways\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Providing more language versions of your application not only increases the potential user base, but also contributes to accessibility and equality. At the same time, it can be very difficult to translate each label and keep track of changes as your application evolves.\u003C\u002Fp>\u003Cp>Gettext and Localazy are flexible solutions to localization problems. Each addresses different sources of workload and they complement each other.\u003C\u002Fp>\u003Cp>For the C language, the topic of string localization is very broad, so I recommend taking a look at the references below.\u003C\u002Fp>\u003Cp>Thank you for reading. I hope you enjoyed reading as much as I enjoyed writing this for you.\u003C\u002Fp>\u003Cp>This article was originally published by Rafał Rybnik on \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flevelup.gitconnected.com\u002Fhow-to-make-a-multi-language-localized-application-in-c-8862e1d1f64f\">Level Up Coding by gitconnected.com\u003C\u002Fa>\u003C\u002Fstrong>.\u003C\u002Fp>\u003Ch2 id=\"references\">📚 References \u003Ca class=\"markdownit-header-anchor\" href=\"#references\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>GNU Gettext:\u003Cbr>\u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\" rel=\"noopener\">https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\u003C\u002Fa>\u003C\u002Fp>\u003Chr>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fprep\u002Fstandards\u002Fhtml_node\u002FInternationalization.html\" rel=\"noopener\">https:\u002F\u002Fwww.gnu.org\u002Fprep\u002Fstandards\u002Fhtml_node\u002FInternationalization.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fptomato.github.io\u002Fadvanced-gtk-techniques\u002Fhtml\u002Fgettext-project.html\" rel=\"noopener\">https:\u002F\u002Fptomato.github.io\u002Fadvanced-gtk-techniques\u002Fhtml\u002Fgettext-project.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fbarrgroup.com\u002Fembedded-systems\u002Fhow-to\u002Ffirmware-internationalization\" rel=\"noopener\">https:\u002F\u002Fbarrgroup.com\u002Fembedded-systems\u002Fhow-to\u002Ffirmware-internationalization\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fdocs.oracle.com\u002Fcd\u002FE23824_01\u002Fhtml\u002FE26033\u002Fglmha.html\" rel=\"noopener\">https:\u002F\u002Fdocs.oracle.com\u002Fcd\u002FE23824_01\u002Fhtml\u002FE26033\u002Fglmha.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.labri.fr\u002Fperso\u002Ffleury\u002Fposts\u002Fprogramming\u002Fa-quick-gettext-tutorial.html\" rel=\"noopener\">https:\u002F\u002Fwww.labri.fr\u002Fperso\u002Ffleury\u002Fposts\u002Fprogramming\u002Fa-quick-gettext-tutorial.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fdeveloper.gnome.org\u002Fglib\u002Fstable\u002Fglib-I18N.html\" rel=\"noopener\">https:\u002F\u002Fdeveloper.gnome.org\u002Fglib\u002Fstable\u002Fglib-I18N.html\u003C\u002Fa>\u003C\u002Fp>",{"id":244,"status":8,"created_on":1951,"modified_on":1952,"icon":1953,"header":1954,"description":1955,"button_label":1956,"link":1957},"2022-03-17T12:23:03.000Z","2026-05-25T10:38:47.000Z","member","Why developers love Localazy 💖","From mobile apps to SaaS platforms. See how product teams handle translations without slowing down development.\n","See case studies","case-study",{"slug":1860,"id":1853,"uuid":1959,"title":1859,"html":1960,"comment_id":1853,"feature_image":1863,"featured":15,"visibility":1961,"email_recipient_filter":1962,"created_at":1963,"updated_at":1861,"published_at":1862,"custom_excerpt":1948,"codeinjection_head":1964,"codeinjection_foot":7,"custom_template":7,"canonical_url":7,"authors":1965,"tags":1969,"primary_author":2025,"primary_tag":2026,"url":2027,"excerpt":1948,"reading_time":147,"access":17,"send_email_when_published":15,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"email_subject":7,"frontmatter":7,"dictionary":1871,"cta":1950,"plainTags":1864},"e66af5a2-627a-41a4-b070-fff6707680d3","\u003Cp>Typically, when you start developing a new app, its interface is in a specific language, perhaps English, if you want to reach an international audience. By \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdictionary\u002Ftranslation\">translating\u003C\u002Fa> your app into other human languages, you can increase the number of people who can install, use, and recommend it.\u003C\u002Fp>\u003Cp>A few weeks ago, I started learning the C programming language. It is rather challenging to switch the C’s way of thinking about software engineering. While learning how to work on strings, I wondered how to solve the topic of multilingual applications and \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdictionary\u002Flocalization\">localization\u003C\u002Fa>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-24.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1340\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-24.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-24.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-24.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-24.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>Unless stated otherwise, all pictures in the article are by the author.\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"%F0%9F%8E%88-translate-gtk-app-using-gettext-and-localazy\">🎈 Translate GTK app using Gettext and Localazy\u003C\u002Fh2>\u003Cp>In this article, I will show you how to use \u003Ccode>Gettext\u003C\u002Fcode> functions to translate a terminal application and a GUI (made using \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdictionary\u002Fgtk\">GTK\u003C\u002Fa>). I will show you how to test this solution using environment variables. And finally, I will show you how to manage multiple translations and even how to help yourself with \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdictionary\u002Fmachine-translation\">machine translations\u003C\u002Fa> using \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\" rel=\"noopener\">Localazy\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>To understand the article, all you need is a basic knowledge of C and possibly some familiarity with the make tool.\u003C\u002Fp>\u003Ch4 id=\"source-code\">Source code\u003C\u002Fh4>\u003Cp>Repository prepared for the article:\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffischerbach\u002FC-localization\" rel=\"noopener\">https:\u002F\u002Fgithub.com\u002Ffischerbach\u002FC-localization\u003C\u002Fa>\u003C\u002Fp>\u003Cp>Every section has its own branch. \u003Ccode>master\u003C\u002Fcode> branch contains final source codes.\u003C\u002Fp>\u003Ch2 id=\"%E2%8C%A8%EF%B8%8F-terminal-application\">⌨️ Terminal application\u003C\u002Fh2>\u003Cp>Let’s tackle a simple terminal application first.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F41f21b64635ac7383a31ebd97dd82a69.js\">\u003C\u002Fscript>\n                                                                                                                         \n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>The source code is littered with several strings containing messages. The first thought is to collect them into an array.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F43f5914d17e71036ab99b83c0f97e029.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Now, they could be easily translated and stored in separate variables. Then we could use conditional compilation and pass the appropriate language to the build tool:\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F280ad9eb668743b0a2415eea589e00b7.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>This solution has several drawbacks.\u003C\u002Fp>\u003Col>\u003Cli>Firstly, already at the compilation stage, you have to choose the language version. The resulting binary will only contain one language. In environments with limited resources, e.g., embedded this may make sense. But the end-user then has to download the version that is right for them.\u003C\u002Fli>\u003Cli>Secondly, this is easy to manage as long as there are only a few fixed strings. But if the software continues to be developed, the number could likely increase quickly. Also, some of the labels may stop being used. Then they occupy memory unnecessarily.\u003C\u002Fli>\u003Cli>Finally, thirdly, it reduces the readability of the code. What is more readable?\u003C\u002Fli>\u003C\u002Fol>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fdf3b52a9de378d70976e94b8a4c7bc0b.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>You can try to remedy this by using a hashtable, but this will be a bit of reinventing the wheel and will not solve the previously mentioned limits. Fortunately, there is a ready-made solution — the \u003Ccode>Gettext\u003C\u002Fcode> library and tools.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%93%91-gettext\">📑 Gettext\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\" rel=\"noopener\">GNU gettext\u003C\u002Fa> is a universal set of tools for producing multi-lingual messages. It provides a framework to support translated message strings with minimal effort. It supports many languages.\u003C\u002Fp>\u003Cblockquote>In a previous article I described how to use \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fdictionary\u002Fgnu-gettext\">GNU gettext\u003C\u002Fa> with Python: \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fblog\u002Fhow-to-build-a-multi-language-dashboard-with-streamlit\">How to build a multi-language dashboard with Streamlit\u003C\u002Fa>\u003C\u002Fstrong>\u003C\u002Fblockquote>\u003Cp>The usage pattern is very simple.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-25.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"700\" height=\"907\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-25.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-25.png 700w\">\u003C\u002Ffigure>\u003Cp>First, we need to modify the source code and mark strings to be translated.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fdb4f3249da539c0deac149aaf5c8aea0.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Note that we added a preprocessor macro to shorten the \u003Ccode>gettext\u003C\u002Fcode> function into \u003Ccode>_\u003C\u002Fcode>. This is a common way to mark localized strings. Next, we generate a file from the application source code containing the strings marked for translation.\u003C\u002Fp>\u003Cpre>\u003Ccode>xgettext -k_ -o locales\u002Fbase.pot — language=C do_nothing.c\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Normally \u003Ccode>xgettext\u003C\u002Fcode> seeks for \u003Ccode>gettext\u003C\u002Fcode> function surrounding texts, so we need to use \u003Ccode>-k_\u003C\u002Fcode> option to determine a new name. The output is a template \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fpot\">POT (Portable Object Template) file\u003C\u002Fa>.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 360px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 300px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fa170d3f63b138a1cebbd527fc2fe64d0.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>It contains every localized text. We use it to create files containing other language versions.\u003C\u002Fp>\u003Cpre>\u003Ccode>msginit --input=locales\u002Fbase.pot --locale=pl \n--output=locales\u002Fpl\u002Fbase.po\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>These are \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fpo\">PO (Portable Object) files\u003C\u002Fa> and contain translated texts.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fb110624041146790e0858b679d5e97c5.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Finally, to use translations in our application, these PO files are converted to MO (Machine Object) files.\u003C\u002Fp>\u003Cpre>\u003Ccode>msgfmt --output-file=locales\u002Fpl\u002FLC_MESSAGES\u002Fbase.mo \nlocales\u002Fpl\u002Fbase.po\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This may sound complicated, but it basically boils down to using a few basic commands, which can then be built into the \u003Ccode>Makefile\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>Note the preservation of the directory structure (especially \u003Ccode>LC_MESSAGES\u003C\u002Fcode>):\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F1df9611ae7249e9cc622651f09bb0137.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>\u003Cstrong>\u003Cstrong>The source code for this section is in the \u003C\u002Fstrong>\u003C\u002Fstrong>\u003Ccode>\u003Cstrong>\u003Cstrong>step-1\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fcode>\u003Cstrong>\u003Cstrong> branch.\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>As an exercise, fork repository, try to create translation to your native language (and maybe create pull request 😉).\u003C\u002Fp>\u003Chr>\u003Ch3 id=\"testing\">Testing\u003C\u002Fh3>\u003Cp>To test our solution in the terminal, we need to set \u003Ccode>locale\u003C\u002Fcode> variables. The UNIX platforms use the environment variables:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ccode>LANG\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>LANGUAGE\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>LC_COLLATE\u003C\u002Fcode>, \u003Ccode>LC_CTYPE\u003C\u002Fcode>, \u003Ccode>LC_MESSAGES\u003C\u002Fcode>, \u003Ccode>LC_MONETARY\u003C\u002Fcode>, \u003Ccode>LC_NUMERIC\u003C\u002Fcode>, \u003Ccode>LC_TIME\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>to determine which locale is to be used.\u003C\u002Fp>\u003Cp>When an application starts, it looks at the value of the LANG environment variable. You can temporarily change the locale in a terminal session by setting the LANG variable before the name of the output executable:\u003C\u002Fp>\u003Cpre>\u003Ccode>LANG=pl .\u002Fdo_nothing\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-26.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"818\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-26.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-26.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-26.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-26.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>As you can see, our application respects the user’s locale settings now.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%96%8C%EF%B8%8F-gtk-20\">🖌️ GTK 2.0\u003C\u002Fh2>\u003Cp>The next application we will look at has a GUI implemented using the GTK+2.0 library. Note that this is a fairly archaic version of GTK. However, our application is simple enough that it will even compile using the newer 3.0 version. Furthermore, in terms of translation, the process will be similar regardless of the library and version used.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 460px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 400px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Faf707169afe743fb5963456b47242429.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>The application has similar “functionality” to the previous terminal app, but with some graphical interface.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FJuv227dQtbY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Some lines may cause difficulties, e.g., HTML formatted label.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 160px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 100px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F32d1b26d5b6a74a3c50d19713658868d.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Using \u003Ccode>Gettext\u003C\u002Fcode> with \u003Ccode>GTK\u003C\u002Fcode> doesn’t differ much.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fa0e1ab3f135b82ffc095d5e53462db1f.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>Glib provides a \u003Ccode>gi18n\u003C\u002Fcode> header file, which we include. Localized texts are marked exactly the same as in the previous example.\u003C\u002Fp>\u003Cp>Result:\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fhw-a46e9ykY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cp>The fantastic thing is that GTK also automatically translates the labels of built-in dialog window labels!\u003C\u002Fp>\u003Cp>\u003Cstrong>\u003Cstrong>The source code for this section is in the \u003C\u002Fstrong>\u003C\u002Fstrong>\u003Ccode>\u003Cstrong>\u003Cstrong>step-2\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fcode>\u003Cstrong>\u003Cstrong> branch.\u003C\u002Fstrong>\u003C\u002Fstrong>\u003C\u002Fp>\u003Chr>\u003Ch3 id=\"possible-problems\">Possible problems \u003C\u002Fh3>\u003Cp>In the course of my work, I encountered a few problems that may be tricky.\u003C\u002Fp>\u003Ch4 id=\"charset-encoding\">Charset encoding\u003C\u002Fh4>\u003Cp>If your language uses an extended character set, remember to set UTF-8 (or another appropriate charset) in the PO files’ headers.\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fe4cbe6b4531cb174f192a7df71b83488\" rel=\"noopener\">https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002Fe4cbe6b4531cb174f192a7df71b83488\u003C\u002Fa>\u003C\u002Fp>\u003Ch4 id=\"proper-locale-directories%E2%80%99-structure\">Proper locale directories’ structure\u003C\u002Fh4>\u003Cp>\u003Cbr>It’s important to keep the directory structure understandable to \u003Ccode>Gettext\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>Especially the \u003Ccode>LC_MESSAGES\u003C\u002Fcode> subdirectory.\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe frameborder=\"0\" style=\"min-width: 200px; width: 100%; height: 260px;\" scrolling=\"no\" seamless=\"seamless\" srcdoc='\u003Chtml>\u003Cbody>\u003Cstyle type=\"text\u002Fcss\">.gist .gist-data { height: 200px; }\u003C\u002Fstyle>\n\n\u003Cscript src=\"https:\u002F\u002Fgist.github.com\u002Ffischerbach\u002F1df9611ae7249e9cc622651f09bb0137.js\">\u003C\u002Fscript>\n\n\u003C\u002Fbody>\u003C\u002Fhtml>'>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Ch4 id=\"complicated-workflow\">Complicated workflow\u003C\u002Fh4>\u003Cp>Remembering all the commands that generate the translation files can be tedious, so in the \u003Ccode>step-3\u003C\u002Fcode> branch you will find simple bash scripts and \u003Ccode>Makefile\u003C\u002Fcode> modifications to automate this process.\u003C\u002Fp>\u003Ch4 id=\"need-for-regenerating-po-files-every-time\">Need for regenerating PO files every time\u003C\u002Fh4>\u003Cp>Be careful when re-generating PO files, because you may lose already translated parts. Merging new labels and their translations can be challenging. Therefore, in the next paragraph, you will learn about a web application that makes it as easy as possible to create new language versions.\u003C\u002Fp>\u003Chr>\u003Ch2 id=\"%F0%9F%9A%A9-localazy\">🚩 Localazy\u003C\u002Fh2>\u003Cp>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\" rel=\"noopener\">Localazy\u003C\u002Fa> is an awesome piece of software that makes the usually awful translation experience bearable and even almost pleasure. It supports many frameworks and localization file formats and provides CLI tools for build automation. My favorite features are machine suggestions for translations and automagic management of changes in translated files.\u003C\u002Fp>\u003Cp>So let’s integrate our report with Localazy. First, \u003Ca href=\"https:\u002F\u002Fghost.localazy.com\u002Fregister\">create a Localazy account\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Finstallation\" rel=\"noopener\">install Localazy CLI.\u003C\u002Fa> Then, create a new application.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-27.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1400\" height=\"942\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-27.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-27.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-27.png 1400w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Make sure to set the App Type to Private app. If your app does not contain sensitive data, you can safely leave it Public. Then, select POT files from available file formats.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-28.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"700\" height=\"273\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-28.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-28.png 700w\">\u003C\u002Ffigure>\u003Cp>You will see a template configuration file \u003Ccode>localazy.json\u003C\u002Fcode>. Copy it to the \u003Ccode>gui-app\u003C\u002Fcode> main folder. Remember to modify the locales folder path. Now you can upload POT files into Localazy:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy upload\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-29.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1601\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-29.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-29.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-29.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-29.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-30.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"904\" height=\"280\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-30.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-30.png 904w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Then, go to your app in Localazy and add some new languages. After a while, you will see a list of phrases to translate in each language of your application.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-31.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"852\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-31.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-31.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-31.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-31.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>And the cherry on the top, a machine translation suggestions and previously used ones come with each phrase.\u003Cbr>\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-32.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1620\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-32.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-32.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-32.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-32.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Once all the translations have been accepted or created, you can download them into your application and re-generate binary MO files:\u003C\u002Fp>\u003Cpre>\u003Ccode>localazy download\nmake locales -B\u003C\u002Fcode>\u003C\u002Fpre>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-33.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"2000\" height=\"1601\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-33.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-33.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-33.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-33.png 2000w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Result:\u003C\u002Fp>\u003C!--kg-card-begin: html-->\u003Ciframe width=\"100%\" height=\"560\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fhw-a46e9ykY\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\u003C!--kg-card-end: html-->\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-34.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1976\" height=\"612\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2021\u002F07\u002Fimage-34.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2021\u002F07\u002Fimage-34.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2021\u002F07\u002Fimage-34.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2021\u002F07\u002Fimage-34.png 1976w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>I’d say it’s quite acceptable.\u003C\u002Fp>\u003Chr>\u003Ch2 id=\"%E2%9C%94%EF%B8%8F-takeaways\">✔️ Takeaways\u003C\u002Fh2>\u003Cp>Providing more language versions of your application not only increases the potential user base, but also contributes to accessibility and equality. At the same time, it can be very difficult to translate each label and keep track of changes as your application evolves.\u003C\u002Fp>\u003Cp>Gettext and Localazy are flexible solutions to localization problems. Each addresses different sources of workload and they complement each other.\u003C\u002Fp>\u003Cp>For the C language, the topic of string localization is very broad, so I recommend taking a look at the references below.\u003C\u002Fp>\u003Cp>Thank you for reading. I hope you enjoyed reading as much as I enjoyed writing this for you.\u003C\u002Fp>\u003Cp>This article was originally published by Rafał Rybnik on \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flevelup.gitconnected.com\u002Fhow-to-make-a-multi-language-localized-application-in-c-8862e1d1f64f\">Level Up Coding by gitconnected.com\u003C\u002Fa>\u003C\u002Fstrong>.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%93%9A-references\">📚 References\u003C\u002Fh2>\u003Cp>GNU Gettext:\u003Cbr>\u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\" rel=\"noopener\">https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002F\u003C\u002Fa>\u003C\u002Fp>\u003Chr>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Fprep\u002Fstandards\u002Fhtml_node\u002FInternationalization.html\" rel=\"noopener\">https:\u002F\u002Fwww.gnu.org\u002Fprep\u002Fstandards\u002Fhtml_node\u002FInternationalization.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fptomato.github.io\u002Fadvanced-gtk-techniques\u002Fhtml\u002Fgettext-project.html\" rel=\"noopener\">https:\u002F\u002Fptomato.github.io\u002Fadvanced-gtk-techniques\u002Fhtml\u002Fgettext-project.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fbarrgroup.com\u002Fembedded-systems\u002Fhow-to\u002Ffirmware-internationalization\" rel=\"noopener\">https:\u002F\u002Fbarrgroup.com\u002Fembedded-systems\u002Fhow-to\u002Ffirmware-internationalization\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fdocs.oracle.com\u002Fcd\u002FE23824_01\u002Fhtml\u002FE26033\u002Fglmha.html\" rel=\"noopener\">https:\u002F\u002Fdocs.oracle.com\u002Fcd\u002FE23824_01\u002Fhtml\u002FE26033\u002Fglmha.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.labri.fr\u002Fperso\u002Ffleury\u002Fposts\u002Fprogramming\u002Fa-quick-gettext-tutorial.html\" rel=\"noopener\">https:\u002F\u002Fwww.labri.fr\u002Fperso\u002Ffleury\u002Fposts\u002Fprogramming\u002Fa-quick-gettext-tutorial.html\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fdeveloper.gnome.org\u002Fglib\u002Fstable\u002Fglib-I18N.html\" rel=\"noopener\">https:\u002F\u002Fdeveloper.gnome.org\u002Fglib\u002Fstable\u002Fglib-I18N.html\u003C\u002Fa>\u003C\u002Fp>","public","none","2021-07-21T09:49:55.000+02:00","{\"intercomArticleUrl\":\"\"}",[1966],{"id":1855,"name":1856,"slug":1857,"profile_image":1858,"cover_image":7,"bio":7,"website":7,"location":1967,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"url":1968},"Warsaw, Poland","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Frafal-rybnik\u002F",[1970,1975,1980,1983,1986,1989,1994,1999,2004,2010,2015,2020],{"id":1971,"name":1972,"slug":1973,"description":1876,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1974},"60a37fc7cf7b6a0001d1f176","[DICT] GNU gettext","term-89","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-89\u002F",{"id":1976,"name":1977,"slug":1978,"description":1955,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1979},"60a37fc7cf7b6a0001d1f11b","[CTA] Why developers love Localazy 💖","cta-13","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-13\u002F",{"id":1981,"name":1866,"slug":1867,"description":1866,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1982},"60a37fc7cf7b6a0001d1f0fa","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fhowto\u002F",{"id":1984,"name":217,"slug":1833,"description":217,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1985},"60a37fc7cf7b6a0001d1f0f9","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Flocalization\u002F",{"id":1987,"name":1870,"slug":1870,"description":7,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1988},"60f567ab6f8ebe0001bd80ec","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fi18n\u002F",{"id":1990,"name":1991,"slug":1992,"description":1896,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1993},"60a37fc7cf7b6a0001d1f121","[DICT] Translation","term-4","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-4\u002F",{"id":1995,"name":1996,"slug":1997,"description":1908,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1998},"60a37fc7cf7b6a0001d1f144","[DICT] Translation Management System (TMS)","term-39","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-39\u002F",{"id":2000,"name":2001,"slug":2002,"description":1918,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2003},"60a37fc7cf7b6a0001d1f12a","[DICT] Machine translation (MT)","term-13","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-13\u002F",{"id":2005,"name":2006,"slug":2007,"description":2008,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2009},"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":2011,"name":2012,"slug":2013,"description":1942,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2014},"61161e3c6f8ebe0001bda176","[DICT] GTK","term-99","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-99\u002F",{"id":2016,"name":2017,"slug":2018,"description":7,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2019},"60fffb486f8ebe0001bd8ddd","[COMSHARE]","comshare","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcomshare\u002F",{"id":2021,"name":2022,"slug":2023,"description":7,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":2024},"64710a2f047091000193ca3d","[INTERCOM]","intercom","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fintercom\u002F",{"id":1855,"name":1856,"slug":1857,"profile_image":1858,"cover_image":7,"bio":7,"website":7,"location":1967,"facebook":7,"twitter":7,"meta_title":7,"meta_description":7,"url":1968},{"id":1971,"name":1972,"slug":1973,"description":1876,"feature_image":7,"visibility":1961,"og_image":7,"og_title":7,"og_description":7,"twitter_image":7,"twitter_title":7,"twitter_description":7,"meta_title":7,"meta_description":7,"codeinjection_head":7,"codeinjection_foot":7,"canonical_url":7,"accent_color":7,"url":1974},"https:\u002F\u002Fghost.localazy.com\u002Fmake-multi-language-application-in-c-gettext-localazy\u002F",[2029,2046,2068],{"id":2030,"owner":2031,"created_by":7,"sort":7,"title":2036,"slug":2037,"modified_on":764,"created_on":2038,"pinned":15,"badge":7,"priority":1824,"main_image":2039,"status":8,"tags":2040,"dictionary":2045,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"665d9cb634f1ce00011a0d19",{"id":2032,"first_name":2033,"last_name":764,"slug":2034,"avatar":2035},"65647a510470910001942873","Simona Rahmanova","simona-rahmanova","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F03\u002Fsimona.png","Localization 101 | Basic concepts for newcomers","localization-101-basic-concepts-a-beginner-needs-to-know","2024-07-29T15:24:00.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F06\u002Flocalization-101.png",[2041,2042],{"id":319,"created_on":1828,"status":8,"label":217,"slug":1833,"on_index_page":17},{"id":319,"created_on":1828,"status":8,"label":2043,"slug":2044,"on_index_page":15},"Guide","guide",[],{"id":2047,"owner":2048,"created_by":7,"sort":7,"title":2053,"slug":2054,"modified_on":764,"created_on":2055,"pinned":15,"badge":7,"priority":1824,"main_image":2056,"status":8,"tags":2057,"dictionary":2067,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"6372308e04709100019374c9",{"id":2049,"first_name":2050,"last_name":764,"slug":2051,"avatar":2052},"6061ffdd2a37af00016d413d","Daniel Charvát","daniel-charvat","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fdan-1.png","Figma in Localization: Figma as a Source of Truth","figma-series-figma-as-source-of-truth","2023-02-08T20:43:55.000+01:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F01\u002FFigma-Series-3.png",[2058,2060,2061,2064],{"id":2059,"created_on":1828,"status":8,"label":545,"slug":544,"on_index_page":17},6183,{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1867,"on_index_page":15},{"id":319,"created_on":1828,"status":8,"label":2062,"slug":2063,"on_index_page":17},"DevTips","devtips",{"id":278,"created_on":1828,"status":8,"label":2065,"slug":2066,"on_index_page":15},"Design","design",[],{"id":2069,"owner":2070,"created_by":7,"sort":7,"title":2075,"slug":2076,"modified_on":764,"created_on":2077,"pinned":15,"badge":7,"priority":1824,"main_image":2078,"status":8,"tags":2079,"dictionary":2086,"reading_time":1835,"excerpt":-1,"og_title":764,"og_description":764,"og_image":764},"63dd1bf30470910001939f8b",{"id":2071,"first_name":2072,"last_name":764,"slug":2073,"avatar":2074},"61dc4e87df4bcb00010bd508","Mary Okosun","mary-okosun","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fokosun.png","The ultimate guide to Localazy API","the-ultimate-guide-to-localazy-api","2023-03-15T10:00:00.000+01:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F03\u002Fultimate-localazy-api-guide.png",[2080,2081,2084,2085],{"id":319,"created_on":1828,"status":8,"label":655,"slug":659,"on_index_page":15},{"id":319,"created_on":1828,"status":8,"label":2082,"slug":2083,"on_index_page":15},"Automated Localization","automated-localization",{"id":319,"created_on":1828,"status":8,"label":1866,"slug":1867,"on_index_page":15},{"id":319,"created_on":1828,"status":8,"label":2043,"slug":2044,"on_index_page":15},[],{"id":26,"sort":7,"created_on":2088,"name":2089,"cta_link":2090,"banner_image":2091},"2022-03-17T12:23:14.000Z","default","https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Flocalazy-ai",{"id":2092},"72defd59-a21d-44b9-822c-4e183ca62b99"]