[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-integrations":3,"footer-homepage":1000,"footer-settings":1068,"main-navigation":1197,"blog-post-nav-nav":1814,"blog-post-nav-[USE LATEST FEATURED]":1836,"blog-how-to-integrate-localazy-into-vercel-builds-for-frontend-applications":1856},[4,180,262,374,468,553,646,739,828,938],{"id":5,"status":6,"created_on":7,"modified_on":8,"name":9,"slug":10,"description":11,"docs_link":12,"priority":13,"has_sdk":14,"sort":15,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":17,"show_in_spa":16,"is_file_format":14,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":18,"tile_subtitle":19,"tile_description":20,"is_enterprise":14,"is_popular":14,"primary_use_case":13,"hierarchy_handling":13,"best_for":13,"file_extension":13,"format_code_example":13,"format_to_extension":21,"upload_features":23,"icon":24,"meta_image":26,"primary_tag":28,"tags":49,"integration_methods":71,"recommended_methods":164,"default_integration_method":165,"faq_categories":172,"translations":178,"platforms_id":5},33,"published","2022-03-18T08:09:24.000Z","2025-02-26T13:36:08.000Z","React","react","Manage your React app translations with Localazy, a continuous localization tool. React i18n done right. ","\u002Fdocs\u002Fcli\u002Fjson-format",null,false,3,true,"JSON format support","CLI support","react-i18next and more","Use Localazy to translate your React projects with your favorite i18n library.",{"json":22},"json",[],{"id":25},"26757a90-88a3-4a94-b587-9f38614ed3bd",{"id":27},"a97492ec-ee8d-429c-bf66-d0fe59b6e5c9",{"id":29,"status":6,"sort":30,"created_on":31,"label":32,"hidden":14,"icon":33,"translations":35},5,2,"2022-03-17T12:23:44.000Z","Web apps",{"id":34},"c9e70e4f-8136-432a-8d82-53c3501a9eb4",[36,38,42,46],{"id":29,"languages_code":37,"label":32},"xxa",{"id":39,"languages_code":40,"label":41},45,"es","Aplicaciones web",{"id":43,"languages_code":44,"label":45},50,"cs","Webové aplikace",{"id":47,"languages_code":48,"label":32},59,"en",[50,57],{"id":29,"status":6,"sort":30,"label":32,"hidden":14,"created_on":31,"icon":51,"translations":52},{"id":34},[53,54,55,56],{"id":29,"languages_code":37,"label":32},{"id":39,"languages_code":40,"label":41},{"id":43,"languages_code":44,"label":45},{"id":47,"languages_code":48,"label":32},{"id":58,"status":6,"sort":59,"label":60,"hidden":14,"created_on":61,"icon":13,"translations":62},8,9,"Framework","2022-03-17T12:23:45.000Z",[63,64,67,69],{"id":58,"languages_code":37,"label":60},{"id":65,"languages_code":40,"label":66},53,"Marco",{"id":68,"languages_code":44,"label":60},60,{"id":70,"languages_code":48,"label":60},67,[72,88,118,141],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":79},4,6,"API","api","Translate strings directly or upload them into your Localazy project.","\u002Fdocs\u002Fapi\u002Fintroduction",[80,81,84,86],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},40,"Utilice la API para exportar traducciones e importar contenido de\u002Fa Localazy mediante programación.",{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},"Choose between translating strings directly or uploading them into Localazy.",{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},"Pomocí rozhraní API můžete programovaně exportovat překlady a importovat obsah z\u002Fdo Localazy.",{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":94},"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",[95,96,100,102,105,109,111,113],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},39,"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":101,"languages_code":48,"label":89,"description":91,"slug":90},51,{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},"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":106,"languages_code":40,"label":107,"description":108,"slug":90},64,"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":110,"languages_code":48,"label":89,"description":91,"slug":90},65,{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},66,{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},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":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":125},"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",[126,127,131,133,137],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},38,"Carga directa de archivos","Cargue sus textos y traducciones existentes en cualquier formato directamente para empezar rápidamente.",{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},47,{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},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":138,"languages_code":115,"label":139,"description":140,"slug":13},85,"Direkter Datei-Upload","Laden Sie Ihre Texte und vorhandenen Übersetzungen in einem beliebigen Format direkt hoch, um schnell loszulegen.",{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":148},1,"Command Line Interface","CLI","cli","The best option for developers that want to make localization an automated part of their workflow.","\u002Fdocs\u002Fcli\u002Fthe-basics",[149,150,154,156,160],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},37,"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":155,"languages_code":48,"label":143,"description":146,"slug":145},46,{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},55,"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":161,"languages_code":115,"label":162,"description":163,"slug":13},87,"Befehlszeilenschnittstelle","Die beste Option für Entwickler, die die Lokalisierung zu einem automatisierten Teil ihres Arbeitsablaufs machen möchten.",[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":166},[167,168,169,170,171],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[173],{"id":174,"status":6,"created_on":175,"sort":13,"slug":176,"label":177,"on_faq_index":13},76,"2025-02-26T12:44:29.000Z","front-end-common","Front-end Common",[179],{"languages_code":37,"name":9,"slug":10,"description":11,"support_type":17,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":19,"tile_description":20,"id":5,"platforms_id":5,"docs_link":12},{"id":181,"status":6,"created_on":7,"modified_on":182,"name":183,"slug":184,"description":185,"docs_link":12,"priority":13,"has_sdk":14,"sort":73,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":17,"show_in_spa":16,"is_file_format":14,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":18,"tile_subtitle":186,"tile_description":187,"is_enterprise":14,"is_popular":14,"primary_use_case":13,"hierarchy_handling":13,"best_for":13,"file_extension":13,"format_code_example":13,"format_to_extension":188,"upload_features":189,"icon":190,"meta_image":192,"primary_tag":194,"tags":201,"integration_methods":215,"recommended_methods":246,"default_integration_method":247,"faq_categories":254,"translations":260,"platforms_id":181},19,"2025-02-26T13:35:41.000Z","Vue.js","vuejs","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":22},[],{"id":191},"6180b41f-3249-47d3-adcd-50fe1cf11bf1",{"id":193},"8171b836-d6b8-4354-8db3-34ccd384970d",{"id":29,"status":6,"sort":30,"created_on":31,"label":32,"hidden":14,"icon":195,"translations":196},{"id":34},[197,198,199,200],{"id":29,"languages_code":37,"label":32},{"id":39,"languages_code":40,"label":41},{"id":43,"languages_code":44,"label":45},{"id":47,"languages_code":48,"label":32},[202,209],{"id":29,"status":6,"sort":30,"label":32,"hidden":14,"created_on":31,"icon":203,"translations":204},{"id":34},[205,206,207,208],{"id":29,"languages_code":37,"label":32},{"id":39,"languages_code":40,"label":41},{"id":43,"languages_code":44,"label":45},{"id":47,"languages_code":48,"label":32},{"id":58,"status":6,"sort":59,"label":60,"hidden":14,"created_on":61,"icon":13,"translations":210},[211,212,213,214],{"id":58,"languages_code":37,"label":60},{"id":65,"languages_code":40,"label":66},{"id":68,"languages_code":44,"label":60},{"id":70,"languages_code":48,"label":60},[216,222,232,239],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":217},[218,219,220,221],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":223},[224,225,226,227,228,229,230,231],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":233},[234,235,236,237,238],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":240},[241,242,243,244,245],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":248},[249,250,251,252,253],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[255,259],{"id":134,"status":6,"created_on":256,"sort":13,"slug":257,"label":258,"on_faq_index":13},"2023-03-01T11:21:41.000Z","vue-localization","Vue.js Localization",{"id":174,"status":6,"created_on":175,"sort":13,"slug":176,"label":177,"on_faq_index":13},[261],{"languages_code":37,"name":183,"slug":184,"description":185,"support_type":17,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":186,"tile_description":187,"id":181,"platforms_id":181,"docs_link":12},{"id":142,"status":6,"created_on":7,"modified_on":263,"name":264,"slug":265,"description":266,"docs_link":267,"priority":13,"has_sdk":14,"sort":74,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":268,"show_in_spa":16,"is_file_format":14,"meta_title":13,"meta_description":13,"featured_on_web":14,"marketing_subtitle":18,"tile_subtitle":268,"tile_description":269,"is_enterprise":14,"is_popular":14,"primary_use_case":270,"hierarchy_handling":271,"best_for":272,"file_extension":273,"format_code_example":274,"format_to_extension":275,"upload_features":277,"icon":278,"meta_image":280,"primary_tag":282,"tags":293,"integration_methods":332,"recommended_methods":363,"default_integration_method":364,"faq_categories":371,"translations":372,"platforms_id":142},"2025-07-03T14:21:42.000Z","Flutter","flutter","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":276},"arb",[],{"id":279},"b9f13a11-9328-4a03-86cf-b20de0685606",{"id":281},"c2674666-4371-4aa4-9a65-438c7363fafe",{"id":74,"status":6,"sort":58,"created_on":61,"label":283,"hidden":14,"icon":284,"translations":286},"Mobile apps",{"id":285},"c9c7e1f5-8b59-4016-ae0c-6fba9469cd55",[287,288,290,292],{"id":74,"languages_code":37,"label":283},{"id":155,"languages_code":40,"label":289},"Aplicaciones móviles",{"id":157,"languages_code":44,"label":291},"Mobilní aplikace",{"id":110,"languages_code":48,"label":283},[294,306,313,320],{"id":295,"status":6,"sort":181,"label":296,"hidden":14,"created_on":61,"icon":297,"translations":299},7,"Desktop & Games",{"id":298},"65b04533-5b4c-430c-b8a4-ecce84754200",[300,301,303,305],{"id":295,"languages_code":37,"label":296},{"id":132,"languages_code":40,"label":302},"Escritorio y Juegos",{"id":134,"languages_code":44,"label":304},"Stolní počítače & Hry",{"id":112,"languages_code":48,"label":296},{"id":29,"status":6,"sort":30,"label":32,"hidden":14,"created_on":31,"icon":307,"translations":308},{"id":34},[309,310,311,312],{"id":29,"languages_code":37,"label":32},{"id":39,"languages_code":40,"label":41},{"id":43,"languages_code":44,"label":45},{"id":47,"languages_code":48,"label":32},{"id":74,"status":6,"sort":58,"label":283,"hidden":14,"created_on":61,"icon":314,"translations":315},{"id":285},[316,317,318,319],{"id":74,"languages_code":37,"label":283},{"id":155,"languages_code":40,"label":289},{"id":157,"languages_code":44,"label":291},{"id":110,"languages_code":48,"label":283},{"id":321,"status":6,"sort":322,"label":323,"hidden":16,"created_on":61,"icon":13,"translations":324},30,32,"ARB",[325,326,328,330],{"id":321,"languages_code":37,"label":323},{"id":327,"languages_code":40,"label":323},120,{"id":329,"languages_code":44,"label":323},125,{"id":331,"languages_code":48,"label":323},130,[333,339,349,356],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":334},[335,336,337,338],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":340},[341,342,343,344,345,346,347,348],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":350},[351,352,353,354,355],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":357},[358,359,360,361,362],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":365},[366,367,368,369,370],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],[373],{"languages_code":37,"name":264,"slug":265,"description":266,"support_type":268,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":268,"tile_description":269,"id":142,"platforms_id":142,"docs_link":267},{"id":375,"status":6,"created_on":376,"modified_on":377,"name":378,"slug":379,"description":380,"docs_link":381,"priority":13,"has_sdk":14,"sort":382,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":383,"show_in_spa":16,"is_file_format":14,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":18,"tile_subtitle":383,"tile_description":384,"is_enterprise":14,"is_popular":14,"primary_use_case":13,"hierarchy_handling":13,"best_for":13,"file_extension":13,"format_code_example":13,"format_to_extension":385,"upload_features":387,"icon":388,"meta_image":390,"primary_tag":392,"tags":407,"integration_methods":422,"recommended_methods":453,"default_integration_method":454,"faq_categories":461,"translations":466,"platforms_id":375},31,"2022-03-18T08:09:25.000Z","2024-07-17T07:43:22.000Z","JavaScript","javascript","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",12,"JS file support","Translating JS files is easy as a pie with Localazy!",{"js":386},"js",[],{"id":389},"4218d0c9-7e6b-494d-9663-37ceaf93ee8c",{"id":391},"2c6699eb-1d80-4772-8268-5597dbcead8c",{"id":393,"status":6,"sort":393,"created_on":61,"label":394,"hidden":14,"icon":395,"translations":397},10,"Programming Languages",{"id":396},"8c5836bb-1fbe-49c5-9330-8f931838c457",[398,399,402,405],{"id":393,"languages_code":37,"label":394},{"id":400,"languages_code":40,"label":401},63,"Lenguajes de Programación",{"id":403,"languages_code":44,"label":404},68,"Programovací Jazyky",{"id":406,"languages_code":48,"label":394},70,[408,415],{"id":29,"status":6,"sort":30,"label":32,"hidden":14,"created_on":31,"icon":409,"translations":410},{"id":34},[411,412,413,414],{"id":29,"languages_code":37,"label":32},{"id":39,"languages_code":40,"label":41},{"id":43,"languages_code":44,"label":45},{"id":47,"languages_code":48,"label":32},{"id":393,"status":6,"sort":393,"label":394,"hidden":14,"created_on":61,"icon":416,"translations":417},{"id":396},[418,419,420,421],{"id":393,"languages_code":37,"label":394},{"id":400,"languages_code":40,"label":401},{"id":403,"languages_code":44,"label":404},{"id":406,"languages_code":48,"label":394},[423,429,439,446],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":424},[425,426,427,428],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":430},[431,432,433,434,435,436,437,438],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":440},[441,442,443,444,445],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":447},[448,449,450,451,452],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":455},[456,457,458,459,460],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[462],{"id":463,"status":6,"created_on":464,"sort":13,"slug":465,"label":378,"on_faq_index":14},35,"2022-06-10T09:49:33.000Z","javascript-i18n-localization",[467],{"languages_code":37,"name":378,"slug":379,"description":380,"support_type":383,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":383,"tile_description":384,"id":375,"platforms_id":375,"docs_link":381},{"id":382,"status":6,"created_on":376,"modified_on":469,"name":470,"slug":22,"description":471,"docs_link":12,"priority":13,"has_sdk":14,"sort":472,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":473,"show_in_spa":16,"is_file_format":16,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":18,"tile_subtitle":474,"tile_description":475,"is_enterprise":14,"is_popular":16,"primary_use_case":476,"hierarchy_handling":477,"best_for":478,"file_extension":479,"format_code_example":480,"format_to_extension":481,"upload_features":482,"icon":483,"meta_image":485,"primary_tag":487,"tags":500,"integration_methods":508,"recommended_methods":539,"default_integration_method":540,"faq_categories":547,"translations":551,"platforms_id":382},"2025-10-14T11:22:29.000Z","JSON","Online JSON translator you will love. Comfortable JSON language files editor with powerful CLI under your fingers for continuous localization.",20,"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":22},[],{"id":484},"99ac3b7c-dba5-4693-a4f4-1f27a6d7782d",{"id":486},"8d614c20-667e-4bee-a64d-7d7ce9c0ee0a",{"id":73,"status":6,"sort":29,"created_on":61,"label":488,"hidden":14,"icon":489,"translations":491},"File formats",{"id":490},"ab7c8f89-dcce-45ab-9e21-8605aef289c3",[492,493,496,498],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},44,"Formatos de archivo",{"id":101,"languages_code":44,"label":497},"Formáty souborů",{"id":499,"languages_code":48,"label":488},62,[501],{"id":73,"status":6,"sort":29,"label":488,"hidden":14,"created_on":61,"icon":502,"translations":503},{"id":490},[504,505,506,507],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},[509,515,525,532],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":510},[511,512,513,514],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":516},[517,518,519,520,521,522,523,524],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":526},[527,528,529,530,531],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":533},[534,535,536,537,538],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":541},[542,543,544,545,546],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[548],{"id":549,"status":6,"created_on":550,"sort":13,"slug":22,"label":470,"on_faq_index":14},36,"2022-06-10T10:49:07.000Z",[552],{"languages_code":37,"name":470,"slug":22,"description":471,"support_type":473,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":474,"tile_description":475,"id":382,"platforms_id":382,"docs_link":12},{"id":554,"status":6,"created_on":376,"modified_on":555,"name":556,"slug":557,"description":558,"docs_link":559,"priority":13,"has_sdk":14,"sort":554,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":560,"show_in_spa":14,"is_file_format":16,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":18,"tile_subtitle":561,"tile_description":562,"is_enterprise":14,"is_popular":16,"primary_use_case":563,"hierarchy_handling":564,"best_for":565,"file_extension":566,"format_code_example":567,"format_to_extension":568,"upload_features":570,"icon":571,"meta_image":573,"primary_tag":575,"tags":582,"integration_methods":604,"recommended_methods":635,"default_integration_method":636,"faq_categories":643,"translations":644,"platforms_id":554},21,"2025-07-03T14:28:31.000Z","XLIFF","xliff","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":569},"xlf",[],{"id":572},"ca424cc8-e8a7-4aef-8dca-ef4a4d1334fc",{"id":574},"889970a6-cce8-4055-b96a-9c3f292aa67f",{"id":73,"status":6,"sort":29,"created_on":61,"label":488,"hidden":14,"icon":576,"translations":577},{"id":490},[578,579,580,581],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},[583,590,597],{"id":73,"status":6,"sort":29,"label":488,"hidden":14,"created_on":61,"icon":584,"translations":585},{"id":490},[586,587,588,589],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},{"id":73,"status":6,"sort":29,"label":488,"hidden":14,"created_on":61,"icon":591,"translations":592},{"id":490},[593,594,595,596],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},{"id":73,"status":6,"sort":29,"label":488,"hidden":14,"created_on":61,"icon":598,"translations":599},{"id":490},[600,601,602,603],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},[605,611,621,628],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":606},[607,608,609,610],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":612},[613,614,615,616,617,618,619,620],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":622},[623,624,625,626,627],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":629},[630,631,632,633,634],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":637},[638,639,640,641,642],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],[645],{"languages_code":37,"name":556,"slug":557,"description":558,"support_type":560,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":561,"tile_description":562,"id":554,"platforms_id":554,"docs_link":559},{"id":472,"status":6,"created_on":647,"modified_on":647,"name":648,"slug":649,"description":650,"docs_link":651,"priority":13,"has_sdk":14,"sort":652,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":560,"show_in_spa":16,"is_file_format":16,"meta_title":13,"meta_description":13,"featured_on_web":14,"marketing_subtitle":18,"tile_subtitle":653,"tile_description":654,"is_enterprise":14,"is_popular":16,"primary_use_case":13,"hierarchy_handling":13,"best_for":13,"file_extension":13,"format_code_example":13,"format_to_extension":655,"upload_features":656,"icon":657,"meta_image":659,"primary_tag":661,"tags":668,"integration_methods":697,"recommended_methods":728,"default_integration_method":729,"faq_categories":736,"translations":737,"platforms_id":472},"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",24,"Seamless integration","Upload, edit and translate PO files with Localazy.",{"po":649},[],{"id":658},"25f317fe-0c10-4f0b-92cd-f80d1f3c6a67",{"id":660},"490022f9-d91a-4e1a-9e79-db374ec997c2",{"id":73,"status":6,"sort":29,"created_on":61,"label":488,"hidden":14,"icon":662,"translations":663},{"id":490},[664,665,666,667],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},[669,676,687],{"id":73,"status":6,"sort":29,"label":488,"hidden":14,"created_on":61,"icon":670,"translations":671},{"id":490},[672,673,674,675],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},{"id":677,"status":6,"sort":677,"label":678,"hidden":16,"created_on":61,"icon":13,"translations":679},34,"C++",[680,681,683,685],{"id":677,"languages_code":37,"label":678},{"id":682,"languages_code":40,"label":678},135,{"id":684,"languages_code":44,"label":678},140,{"id":686,"languages_code":48,"label":678},144,{"id":554,"status":6,"sort":652,"label":688,"hidden":16,"created_on":61,"icon":13,"translations":689},"Gettext",[690,691,693,695],{"id":554,"languages_code":37,"label":688},{"id":692,"languages_code":40,"label":688},101,{"id":694,"languages_code":44,"label":688},106,{"id":696,"languages_code":48,"label":688},111,[698,704,714,721],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":699},[700,701,702,703],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":705},[706,707,708,709,710,711,712,713],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":715},[716,717,718,719,720],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":722},[723,724,725,726,727],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":730},[731,732,733,734,735],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],[738],{"languages_code":37,"name":648,"slug":649,"description":650,"support_type":560,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":653,"tile_description":654,"id":472,"platforms_id":472,"docs_link":651},{"id":740,"status":6,"created_on":376,"modified_on":741,"name":742,"slug":743,"description":744,"docs_link":745,"priority":13,"has_sdk":14,"sort":746,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":560,"show_in_spa":16,"is_file_format":16,"meta_title":13,"meta_description":13,"featured_on_web":14,"marketing_subtitle":18,"tile_subtitle":747,"tile_description":748,"is_enterprise":14,"is_popular":14,"primary_use_case":749,"hierarchy_handling":750,"best_for":751,"file_extension":752,"format_code_example":753,"format_to_extension":754,"upload_features":755,"icon":756,"meta_image":757,"primary_tag":759,"tags":766,"integration_methods":784,"recommended_methods":815,"default_integration_method":816,"faq_categories":823,"translations":826,"platforms_id":740},26,"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",27,".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":743},[],{"id":658},{"id":758},"1f07bf83-9363-47d6-b21b-a5121c0efaf6",{"id":73,"status":6,"sort":29,"created_on":61,"label":488,"hidden":14,"icon":760,"translations":761},{"id":490},[762,763,764,765],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},[767,774],{"id":73,"status":6,"sort":29,"label":488,"hidden":14,"created_on":61,"icon":768,"translations":769},{"id":490},[770,771,772,773],{"id":73,"languages_code":37,"label":488},{"id":494,"languages_code":40,"label":495},{"id":101,"languages_code":44,"label":497},{"id":499,"languages_code":48,"label":488},{"id":652,"status":6,"sort":740,"label":775,"hidden":16,"created_on":61,"icon":13,"translations":776},"C#",[777,778,780,782],{"id":652,"languages_code":37,"label":775},{"id":779,"languages_code":40,"label":775},103,{"id":781,"languages_code":44,"label":775},108,{"id":783,"languages_code":48,"label":775},113,[785,791,801,808],{"id":73,"status":6,"sort":74,"label":75,"alternative_label":13,"slug":76,"description":77,"documentation_link":78,"loc_icon":76,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":786},[787,788,789,790],{"id":73,"languages_code":37,"label":75,"description":77,"slug":76},{"id":82,"languages_code":40,"label":75,"description":83,"slug":76},{"id":43,"languages_code":48,"label":75,"description":85,"slug":76},{"id":47,"languages_code":44,"label":75,"description":87,"slug":76},{"id":15,"status":6,"sort":29,"label":89,"alternative_label":13,"slug":90,"description":91,"documentation_link":92,"loc_icon":93,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":792},[793,794,795,796,797,798,799,800],{"id":15,"languages_code":37,"label":89,"description":91,"slug":90},{"id":97,"languages_code":40,"label":98,"description":99,"slug":13},{"id":101,"languages_code":48,"label":89,"description":91,"slug":90},{"id":68,"languages_code":44,"label":103,"description":104,"slug":13},{"id":106,"languages_code":40,"label":107,"description":108,"slug":90},{"id":110,"languages_code":48,"label":89,"description":91,"slug":90},{"id":112,"languages_code":44,"label":103,"description":104,"slug":90},{"id":114,"languages_code":115,"label":116,"description":117,"slug":13},{"id":30,"status":6,"sort":73,"label":119,"alternative_label":120,"slug":121,"description":122,"documentation_link":123,"loc_icon":124,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":802},[803,804,805,806,807],{"id":30,"languages_code":37,"label":119,"description":122,"slug":121},{"id":128,"languages_code":40,"label":129,"description":130,"slug":13},{"id":132,"languages_code":48,"label":119,"description":122,"slug":121},{"id":134,"languages_code":44,"label":135,"description":136,"slug":13},{"id":138,"languages_code":115,"label":139,"description":140,"slug":13},{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":809},[810,811,812,813,814],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[],{"id":142,"status":6,"sort":15,"label":143,"alternative_label":144,"slug":145,"description":146,"documentation_link":147,"loc_icon":145,"is_official_plugin":14,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":817},[818,819,820,821,822],{"id":142,"languages_code":37,"label":143,"description":146,"slug":145},{"id":151,"languages_code":40,"label":152,"description":153,"slug":145},{"id":155,"languages_code":48,"label":143,"description":146,"slug":145},{"id":157,"languages_code":44,"label":158,"description":159,"slug":145},{"id":161,"languages_code":115,"label":162,"description":163,"slug":13},[824],{"id":494,"status":6,"created_on":825,"sort":13,"slug":743,"label":742,"on_faq_index":13},"2022-08-01T16:44:06.000Z",[827],{"languages_code":37,"name":742,"slug":743,"description":744,"support_type":560,"meta_title":13,"meta_description":13,"marketing_subtitle":18,"tile_subtitle":747,"tile_description":748,"id":740,"platforms_id":740,"docs_link":745},{"id":829,"status":6,"created_on":830,"modified_on":831,"name":832,"slug":833,"description":834,"docs_link":835,"priority":13,"has_sdk":13,"sort":836,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":837,"show_in_spa":16,"is_file_format":13,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":837,"tile_subtitle":837,"tile_description":838,"is_enterprise":14,"is_popular":16,"primary_use_case":13,"hierarchy_handling":13,"best_for":13,"file_extension":13,"format_code_example":13,"format_to_extension":13,"upload_features":13,"icon":839,"meta_image":841,"primary_tag":843,"tags":856,"integration_methods":905,"recommended_methods":925,"default_integration_method":926,"faq_categories":933,"translations":936,"platforms_id":829},72,"2022-06-16T09:08:11.000Z","2026-04-27T18:16:54.000Z","Strapi","strapi","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",54,"Localization Plugin","Localize your Strapi website with our official localization plugin. Easy setup and installation.",{"id":840},"cde7f1d0-f2e0-4243-929e-a3f8f9146e69",{"id":842},"5995b721-a2ea-487e-ad4b-298a489bbd24",{"id":382,"status":6,"sort":844,"created_on":61,"label":845,"hidden":14,"icon":846,"translations":848},11,"CMS",{"id":847},"1172a655-928c-4594-9263-d8afdfd9cd79",[849,850,852,854],{"id":382,"languages_code":37,"label":845},{"id":851,"languages_code":40,"label":845},73,{"id":853,"languages_code":44,"label":845},81,{"id":855,"languages_code":48,"label":845},84,[857,871,884,891],{"id":858,"status":6,"sort":859,"label":860,"hidden":14,"created_on":61,"icon":13,"translations":861},18,17,"Multilingual SEO",[862,863,866,869],{"id":858,"languages_code":37,"label":860},{"id":864,"languages_code":40,"label":865},89,"SEO multilingüe",{"id":867,"languages_code":44,"label":868},94,"Vícejazyčné SEO",{"id":870,"languages_code":48,"label":860},99,{"id":5,"status":6,"sort":5,"label":872,"hidden":14,"created_on":61,"icon":873,"translations":875},"E-commerce",{"id":874},"e782ed3f-d954-45ca-8b17-5bf5fe95f30a",[876,877,880,882],{"id":5,"languages_code":37,"label":872},{"id":878,"languages_code":40,"label":879},132,"Comercio electrónico",{"id":881,"languages_code":44,"label":872},137,{"id":883,"languages_code":48,"label":872},142,{"id":382,"status":6,"sort":844,"label":845,"hidden":14,"created_on":61,"icon":885,"translations":886},{"id":847},[887,888,889,890],{"id":382,"languages_code":37,"label":845},{"id":851,"languages_code":40,"label":845},{"id":853,"languages_code":44,"label":845},{"id":855,"languages_code":48,"label":845},{"id":30,"status":6,"sort":74,"label":892,"hidden":14,"created_on":61,"icon":893,"translations":895},"Marketing tools",{"id":894},"098fe6a4-dd2e-42d8-937e-2d8121e6e266",[896,897,900,903],{"id":30,"languages_code":37,"label":892},{"id":898,"languages_code":40,"label":899},43,"Herramientas de marketing",{"id":901,"languages_code":44,"label":902},48,"Marketingové nástroje",{"id":904,"languages_code":48,"label":892},58,[906],{"id":58,"status":6,"sort":13,"label":907,"alternative_label":908,"slug":909,"description":910,"documentation_link":911,"loc_icon":912,"is_official_plugin":16,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":913},"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",[914,915,918,919,922],{"id":58,"languages_code":37,"label":907,"description":910,"slug":909},{"id":898,"languages_code":40,"label":916,"description":917,"slug":13},"Complemento Oficial de Strapi","Nuestros desarrolladores mantienen un complemento oficial de localización de Strapi. ¡Empiece en unos pocos clics!",{"id":65,"languages_code":48,"label":907,"description":910,"slug":909},{"id":499,"languages_code":44,"label":920,"description":921,"slug":13},"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":864,"languages_code":115,"label":923,"description":924,"slug":13},"Offizielles Strapi-Plugin","Unsere Entwickler pflegen ein offizielles Strapi-Lokalisierungs-Plugin. Starten Sie mit ein paar Klicks!",[],{"id":58,"status":6,"sort":13,"label":907,"alternative_label":908,"slug":909,"description":910,"documentation_link":911,"loc_icon":912,"is_official_plugin":16,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":927},[928,929,930,931,932],{"id":58,"languages_code":37,"label":907,"description":910,"slug":909},{"id":898,"languages_code":40,"label":916,"description":917,"slug":13},{"id":65,"languages_code":48,"label":907,"description":910,"slug":909},{"id":499,"languages_code":44,"label":920,"description":921,"slug":13},{"id":864,"languages_code":115,"label":923,"description":924,"slug":13},[934],{"id":151,"status":6,"created_on":935,"sort":13,"slug":833,"label":832,"on_faq_index":13},"2022-06-16T09:24:13.000Z",[937],{"languages_code":37,"name":832,"slug":833,"description":834,"support_type":837,"meta_title":13,"meta_description":13,"marketing_subtitle":837,"tile_subtitle":837,"tile_description":838,"id":829,"platforms_id":829,"docs_link":835},{"id":68,"status":6,"created_on":376,"modified_on":939,"name":940,"slug":941,"description":13,"docs_link":942,"priority":13,"has_sdk":14,"sort":157,"highlighted":14,"in_menu":16,"changefreq":13,"support_type":943,"show_in_spa":16,"is_file_format":14,"meta_title":13,"meta_description":13,"featured_on_web":16,"marketing_subtitle":944,"tile_subtitle":945,"tile_description":946,"is_enterprise":14,"is_popular":16,"primary_use_case":13,"hierarchy_handling":13,"best_for":13,"file_extension":13,"format_code_example":13,"format_to_extension":13,"upload_features":947,"icon":948,"meta_image":950,"primary_tag":952,"tags":966,"integration_methods":974,"recommended_methods":990,"default_integration_method":991,"faq_categories":997,"translations":998,"platforms_id":68},"2024-12-20T15:00:22.000Z","Figma","figma","\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":949},"813745a4-a77d-4735-93b7-e0dd731b2304",{"id":951},"7573fed6-8817-4cb4-84d2-be327e6c4891",{"id":15,"status":6,"sort":295,"created_on":61,"label":953,"hidden":14,"icon":954,"translations":956},"Design tools",{"id":955},"1053d863-b690-4fbd-aadf-dbf2ba282768",[957,958,961,964],{"id":15,"languages_code":37,"label":953},{"id":959,"languages_code":40,"label":960},42,"Herramientas de diseño",{"id":962,"languages_code":44,"label":963},49,"Nástroje pro návrh",{"id":965,"languages_code":48,"label":953},57,[967],{"id":15,"status":6,"sort":295,"label":953,"hidden":14,"created_on":61,"icon":968,"translations":969},{"id":955},[970,971,972,973],{"id":15,"languages_code":37,"label":953},{"id":959,"languages_code":40,"label":960},{"id":962,"languages_code":44,"label":963},{"id":965,"languages_code":48,"label":953},[975],{"id":295,"status":6,"sort":13,"label":908,"alternative_label":908,"slug":976,"description":977,"documentation_link":978,"loc_icon":912,"is_official_plugin":16,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":979},"official-plugin","Our developers maintain an official plugin for this integration. Start in a few clicks!","\u002Fdocs",[980,981,985,987],{"id":295,"languages_code":37,"label":908,"description":977,"slug":976},{"id":982,"languages_code":40,"label":983,"description":984,"slug":13},23,"Plugin Oficial","Nuestros desarrolladores mantienen un plugin oficial para esta integración. ¡Empiece con unos pocos clics!",{"id":986,"languages_code":48,"label":908,"description":977,"slug":976},29,{"id":463,"languages_code":44,"label":988,"description":989,"slug":13},"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":295,"status":6,"sort":13,"label":908,"alternative_label":908,"slug":976,"description":977,"documentation_link":978,"loc_icon":912,"is_official_plugin":16,"is_universal_plugin":14,"universal_plugin_vendor":13,"translations":992},[993,994,995,996],{"id":295,"languages_code":37,"label":908,"description":977,"slug":976},{"id":982,"languages_code":40,"label":983,"description":984,"slug":13},{"id":986,"languages_code":48,"label":908,"description":977,"slug":976},{"id":463,"languages_code":44,"label":988,"description":989,"slug":13},[],[999],{"languages_code":37,"name":940,"slug":941,"description":13,"support_type":943,"meta_title":13,"meta_description":13,"marketing_subtitle":944,"tile_subtitle":945,"tile_description":946,"id":68,"platforms_id":68,"docs_link":942},{"status":6,"header_badges":1001,"footer_badges":1019,"footer_secured_badges":1025,"slider_badges":1038},[1002,1009,1014],{"id":142,"status":6,"sort":13,"link":1003,"title":1004,"badgeType":1005,"badgeName":1006,"metadata":13,"image":1007},"https:\u002F\u002Fwww.g2.com\u002Fproducts\u002Flocalazy\u002Freviews","Best meets requirements","Other","G2-winter-24-best-meets-requirments",{"id":1008},"8d5dd6fd-6995-4c92-8219-a6ed5ba6acdc",{"id":30,"status":6,"sort":13,"link":1003,"title":1010,"badgeType":1005,"badgeName":1011,"metadata":13,"image":1012},"Best support","G2-winter-24-best-support",{"id":1013},"e59dd465-84d9-45c7-987d-dd4048fd6992",{"id":15,"status":6,"sort":13,"link":1003,"title":1015,"badgeType":1005,"badgeName":1016,"metadata":13,"image":1017},"Easiest admin","G2-winter-24-easiest-admin",{"id":1018},"5f12c4c8-bec0-47cf-87b4-a4502e9f1bd2",[1020],{"id":382,"status":6,"sort":13,"link":1003,"title":1021,"badgeType":1005,"badgeName":1022,"metadata":13,"image":1023},"Users love us","Users love us 25",{"id":1024},"232416a5-86ba-4be6-85a5-b88802003d53",[1026,1032],{"id":844,"status":6,"sort":13,"link":1027,"title":1028,"badgeType":1005,"badgeName":1029,"metadata":13,"image":1030},"https:\u002F\u002Fsprinto.com\u002Fget-iso-27001\u002F","Sprinto ISO 27001","Sprinto ISO 27001 certificate",{"id":1031},"c1c6c06c-6caf-4b78-8a7e-9606c395eb61",{"id":1033,"status":6,"sort":13,"link":1034,"title":1035,"badgeType":1005,"badgeName":1035,"metadata":13,"image":1036},13,"https:\u002F\u002Fwww.aicpa.org\u002Fsoc4so","SOC certificate",{"id":1037},"4f4bc0a6-09a0-41df-8295-8f990d96d941",[1039,1045,1049,1053,1057,1061,1066],{"id":29,"status":6,"sort":13,"link":1003,"title":1040,"badgeType":1005,"badgeName":1041,"metadata":1042,"image":1043},"Most likely to recommend","a","",{"id":1044},"da055731-3f11-4fc7-96f2-c11c0b84c831",{"id":74,"status":6,"sort":13,"link":1003,"title":1046,"badgeType":1005,"badgeName":13,"metadata":13,"image":1047},"EMEA High Performer",{"id":1048},"586fb488-81f2-41db-a4e8-ef309e50c0e6",{"id":295,"status":6,"sort":13,"link":1003,"title":1050,"badgeType":1005,"badgeName":13,"metadata":13,"image":1051},"Ease of Doing Business With",{"id":1052},"bfa26865-430e-463d-9886-cb56a8a8ecf6",{"id":58,"status":6,"sort":13,"link":1003,"title":1054,"badgeType":1005,"badgeName":13,"metadata":13,"image":1055},"High Performer",{"id":1056},"2cc1ba0f-c23a-4c97-ad4a-a655c97466fe",{"id":59,"status":6,"sort":13,"link":1003,"title":1058,"badgeType":1005,"badgeName":13,"metadata":13,"image":1059},"Fastest Implementation",{"id":1060},"6f297758-1c95-45f4-a6e9-528319897132",{"id":393,"status":6,"sort":13,"link":1062,"title":1063,"badgeType":1005,"badgeName":13,"metadata":13,"image":1064},"https:\u002F\u002Fwww.intercert.com\u002Fservices\u002Fgovernance-risk-compliance\u002Fiso-iec-27001","Intercert ISO 27001",{"id":1065},"0521a5f1-e1f2-4da6-a2bc-dc92773f2a7b",{"id":844,"status":6,"sort":13,"link":1027,"title":1028,"badgeType":1005,"badgeName":1029,"metadata":13,"image":1067},{"id":1031},{"id":142,"status":6,"security_section_title":1069,"loved_section_title":1070,"columns":1071,"social_links":1157,"policy_links":1187},"Secured & trusted","Loved by users",[1072,1085,1101,1123,1127],{"id":142,"status":6,"sort":13,"title":1073,"column_key":1074,"links":1075},"Localazy","connect",[1076,1079,1082],{"id":844,"status":6,"sort":142,"title":1077,"url":1078},"Book a demo","___LOCALAZY_MEETING_URL___",{"id":382,"status":6,"sort":30,"title":1080,"url":1081},"Contact","\u002Fcontact",{"id":554,"status":6,"sort":15,"title":1083,"url":1084},"About us","\u002Fabout-us",{"id":30,"status":6,"sort":13,"title":1086,"column_key":1087,"links":1088},"Programs","programs",[1089,1092,1095,1098],{"id":142,"status":6,"sort":73,"title":1090,"url":1091},"Partner Program","\u002Fpartnership",{"id":30,"status":6,"sort":29,"title":1093,"url":1094},"Ambassador Program","\u002Fambassador",{"id":15,"status":6,"sort":74,"title":1096,"url":1097},"Startup Program","\u002Ffor\u002Fstartups",{"id":73,"status":6,"sort":295,"title":1099,"url":1100},"Nonprofits","\u002Ffor\u002Fnonprofit",{"id":15,"status":6,"sort":13,"title":1102,"column_key":1103,"links":1104},"Use Cases","use_cases",[1105,1108,1111,1114,1117,1120],{"id":29,"status":6,"sort":58,"title":1106,"url":1107},"Software Localization","\u002Fterm\u002Fsoftware-localization",{"id":74,"status":6,"sort":59,"title":1109,"url":1110},"Machine Translation Services","\u002Ffeatures\u002Fmachine-translation",{"id":295,"status":6,"sort":393,"title":1112,"url":1113},"Translation API","\u002Ffeatures\u002Ftranslation-api",{"id":58,"status":6,"sort":844,"title":1115,"url":1116},"Crowdsourced Translations","\u002Ffeatures\u002Fshare-tm",{"id":59,"status":6,"sort":382,"title":1118,"url":1119},"Figma i18n & localization","\u002Ffeatures\u002Ffigma-localization-plugin",{"id":393,"status":6,"sort":1033,"title":1121,"url":1122},"Translation as a Service","\u002Fterm\u002Ftranslation-service",{"id":73,"status":6,"sort":13,"title":1124,"column_key":1125,"links":1126},"Integrations","integrations",[],{"id":29,"status":6,"sort":13,"title":1128,"column_key":1129,"links":1130},"Resources","resources",[1131,1134,1138,1142,1145,1148,1151,1154],{"id":1033,"status":6,"sort":1132,"title":1133,"url":978},14,"Documentation",{"id":1132,"status":6,"sort":1135,"title":1136,"url":1137},15,"Dictionary","\u002Fdictionary",{"id":1135,"status":6,"sort":1139,"title":1140,"url":1141},16,"Case Studies","\u002Fcase-study",{"id":1139,"status":6,"sort":859,"title":1143,"url":1144},"Discussion forum","___DISCUSS_URL___",{"id":859,"status":6,"sort":858,"title":1146,"url":1147},"Localization Blog","\u002Fblog",{"id":858,"status":6,"sort":181,"title":1149,"url":1150},"FAQ","\u002Ffaq",{"id":181,"status":6,"sort":472,"title":1152,"url":1153},"Pricing","\u002Fpricing",{"id":472,"status":6,"sort":554,"title":1155,"url":1156},"Brand assets","https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Fu\u002F1\u002Ffolders\u002F1tZqsZHBlGelz7A2FwTsiwrs4j3sd9HTk",[1158,1163,1168,1173,1178,1183],{"id":142,"status":6,"sort":13,"platform":1159,"icon":1160,"url":1161,"label":1162},"feed","rss","\u002Ffeed.xml","Localazy RSS Feed",{"id":30,"status":6,"sort":13,"platform":1164,"icon":1165,"url":1166,"label":1167},"facebook","fb-logo","https:\u002F\u002Fwww.facebook.com\u002Flocalazy\u002F","Localazy facebook",{"id":15,"status":6,"sort":13,"platform":1169,"icon":1170,"url":1171,"label":1172},"github","github-logo","https:\u002F\u002Fgithub.com\u002Flocalazy","Localazy GitHub",{"id":73,"status":6,"sort":13,"platform":1174,"icon":1175,"url":1176,"label":1177},"x","x-twitter","https:\u002F\u002Fx.com\u002Flocalazy","Localazy X",{"id":29,"status":6,"sort":13,"platform":1179,"icon":1180,"url":1181,"label":1182},"linkedin","linkedin-logo","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002F37836599\u002F","Localazy LinkedIn",{"id":74,"status":6,"sort":13,"platform":1184,"icon":1185,"url":1144,"label":1186},"discourse","discourse-logo","Localazy Discourse",[1188,1191,1194],{"id":142,"status":6,"sort":13,"title":1189,"url":1190,"action":13},"Privacy policy","\u002Fprivacy-policy",{"id":30,"status":6,"sort":13,"title":1192,"url":1193,"action":13},"Terms & Conditions","\u002Fterms-and-conditions",{"id":15,"status":6,"sort":13,"title":1195,"url":13,"action":1196},"Cookies","cookie-consent",[1198,1379,1589,1690,1809,1811],{"id":30,"name":1199,"url":13,"url_text":13,"status":6,"groups":1200},"Solutions",[1201,1210,1277,1309],{"navigation_items_group_id":1202},{"id":15,"sort":29,"status":6,"name":1203,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":16,"show_all_url":13,"represent_as_tile":14,"items":1205},"Featured Article","top",[1206],{"collection":1207,"item":1208},"blog_post_navigation_item_type",{"id":73,"status":6,"sort":13,"show_author_img":16,"blog_post_tag":1209,"description":13},"nav",{"navigation_items_group_id":1211},{"id":29,"sort":142,"status":6,"name":1212,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":1213,"represent_as_tile":16,"items":1214},"Your Role","\u002Froles",[1215,1227,1237,1247,1257,1267],{"collection":1216,"item":1217},"relation_navigation_item_type",{"id":142,"status":6,"sort":13,"name":1218,"item":1219},"CMO",[1220],{"collection":1221,"item":1222},"personas",{"id":142,"status":6,"sort":13,"slug":1223,"icon":1224},"chief-marketing-officers",{"id":1225,"title":1226},"526097d8-176f-48e5-83d3-2fc4d77061f9","La Mail Bulk",{"collection":1216,"item":1228},{"id":15,"status":6,"sort":13,"name":1229,"item":1230},"CTO",[1231],{"collection":1221,"item":1232},{"id":73,"status":6,"sort":13,"slug":1233,"icon":1234},"chief-technical-officers",{"id":1235,"title":1236},"f808fdf0-c78b-4294-ba59-fe25f46fe825","La Mechanic",{"collection":1216,"item":1238},{"id":472,"status":6,"sort":13,"name":1239,"item":1240},"Product Manager",[1241],{"collection":1221,"item":1242},{"id":858,"status":6,"sort":13,"slug":1243,"icon":1244},"product-managers",{"id":1245,"title":1246},"ea39586a-21fc-4b34-ba87-496028e5198f","La Worker",{"collection":1216,"item":1248},{"id":151,"status":6,"sort":13,"name":1249,"item":1250},"Translator",[1251],{"collection":1221,"item":1252},{"id":472,"status":6,"sort":13,"slug":1253,"icon":1254},"professional-translators",{"id":1255,"title":1256},"07945171-d51d-4ca8-96c0-21cde9db258f","La Chat",{"collection":1216,"item":1258},{"id":128,"status":6,"sort":13,"name":1259,"item":1260},"Developer",[1261],{"collection":1221,"item":1262},{"id":321,"status":6,"sort":13,"slug":1263,"icon":1264},"software-developers",{"id":1265,"title":1266},"1806e46d-c551-4845-bf42-4407344d229e","La Terminal",{"collection":1216,"item":1268},{"id":746,"status":6,"sort":13,"name":1269,"item":1270},"Localization Manager",[1271],{"collection":1221,"item":1272},{"id":74,"status":6,"sort":13,"slug":1273,"icon":1274},"localization-managers",{"id":1275,"title":1276},"dac69bd1-bf5d-41d0-87d4-dd13e314698a","La Language",{"navigation_items_group_id":1278},{"id":59,"sort":15,"status":6,"name":1279,"render_show_all_url":14,"show_all_url_position":1280,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1281},"Use cases","bottom",[1282,1287,1291,1296,1300,1305],{"collection":1283,"item":1284},"simple_link_navigation_item_type",{"id":652,"status":6,"sort":13,"url":1285,"url_text":1286,"show_favorite_icon":14},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fsoftware-localization","Software localization",{"collection":1283,"item":1288},{"id":740,"status":6,"sort":13,"url":1289,"url_text":1290,"show_favorite_icon":14},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fmobile-app-localization","Mobile app localization",{"collection":1283,"item":1292},{"id":1293,"status":6,"sort":13,"url":1294,"url_text":1295,"show_favorite_icon":14},25,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fwebsite-localization","Website localization",{"collection":1283,"item":1297},{"id":746,"status":6,"sort":13,"url":1298,"url_text":1299,"show_favorite_icon":14},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fdesign-localization","Design localization",{"collection":1283,"item":1301},{"id":1302,"status":6,"sort":13,"url":1303,"url_text":1304,"show_favorite_icon":14},28,"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fgame-localization","Game localization",{"collection":1283,"item":1306},{"id":986,"status":6,"sort":13,"url":1307,"url_text":1308,"show_favorite_icon":14},"https:\u002F\u002Flocalazy.com\u002Fuse-cases\u002Fhelp-and-docs-localization","Help & docs localization",{"navigation_items_group_id":1310},{"id":58,"sort":30,"status":6,"name":1311,"render_show_all_url":14,"show_all_url_position":1280,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1312},"Industry",[1313,1323,1333,1342,1352,1361,1372],{"collection":1216,"item":1314},{"id":982,"status":6,"sort":13,"name":1315,"item":1316},"Digital Agencies",[1317],{"collection":1221,"item":1318},{"id":295,"status":6,"sort":13,"slug":1319,"icon":1320},"digital-agencies",{"id":1321,"title":1322},"547f5619-b21d-4b29-86f1-8b2200313cde","La Digi Agency",{"collection":1216,"item":1324},{"id":97,"status":6,"sort":13,"name":1325,"item":1326},"Startups & SaaS",[1327],{"collection":1221,"item":1328},{"id":30,"status":6,"sort":13,"slug":1329,"icon":1330},"startups",{"id":1331,"title":1332},"da1516e2-4afc-40a2-bcbf-a8161e2d610d","La Saa S",{"collection":1216,"item":1334},{"id":30,"status":6,"sort":13,"name":872,"item":1335},[1336],{"collection":1221,"item":1337},{"id":29,"status":6,"sort":13,"slug":1338,"icon":1339},"e-commerce",{"id":1340,"title":1341},"a3d09cd2-054f-4bb5-a0a2-d3d207db65df","La Ecommerce",{"collection":1216,"item":1343},{"id":181,"status":6,"sort":13,"name":1344,"item":1345},"FinTech Platforms",[1346],{"collection":1221,"item":1347},{"id":746,"status":6,"sort":13,"slug":1348,"icon":1349},"fintech",{"id":1350,"title":1351},"147339ba-07d1-4e5e-baad-23d27e60c919","La Money",{"collection":1216,"item":1353},{"id":652,"status":6,"sort":13,"name":1354,"item":1355},"Translation Agencies",[1356],{"collection":1221,"item":1357},{"id":652,"status":6,"sort":13,"slug":1358,"icon":1359},"translation-agencies",{"id":1360,"title":1276},"15d6fe33-2af8-4d6e-933d-5caa64394511",{"collection":1216,"item":1362},{"id":1363,"status":6,"sort":13,"name":1364,"item":1365},22,"Travel & Tourism",[1366],{"collection":1221,"item":1367},{"id":15,"status":6,"sort":13,"slug":1368,"icon":1369},"tourism",{"id":1370,"title":1371},"23a785e8-0ae5-4c4b-8452-aab1b58182a6","La Travel",{"collection":1216,"item":1373},{"id":1293,"status":6,"sort":13,"name":1374,"item":1375},"Nonprofit Causes",[1376],{"collection":1221,"item":1377},{"id":1302,"status":6,"sort":13,"slug":1378,"icon":13},"nonprofit",{"id":29,"name":1380,"url":13,"url_text":13,"status":6,"groups":1381},"Features",[1382,1441,1492,1538],{"navigation_items_group_id":1383},{"id":844,"sort":74,"status":6,"name":1384,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1385},"Localization",[1386,1394,1402,1409,1416,1420,1427,1434],{"collection":1216,"item":1387},{"id":494,"status":6,"sort":13,"name":1388,"item":1389},"Localization services",[1390],{"collection":1391,"item":1392},"products",{"id":59,"status":6,"slug":1393},"continuous-localization-team",{"collection":1216,"item":1395},{"id":39,"status":6,"sort":13,"name":1396,"item":1397},"Translation management",[1398],{"collection":1399,"item":1400},"term_landing_page",{"id":986,"status":6,"slug":1401},"translation-management-system",{"collection":1216,"item":1403},{"id":155,"status":6,"sort":13,"name":1404,"item":1405},"Context Screenshots",[1406],{"collection":1391,"item":1407},{"id":1033,"status":6,"slug":1408},"context-screenshots-ocr",{"collection":1216,"item":1410},{"id":132,"status":6,"sort":13,"name":1411,"item":1412},"Translation Glossary",[1413],{"collection":1391,"item":1414},{"id":859,"status":6,"slug":1415},"glossary",{"collection":1283,"item":1417},{"id":73,"status":6,"sort":13,"url":1418,"url_text":1419,"show_favorite_icon":14},"\u002Fdocs\u002Fgeneral\u002Freviewing-translations","Quality control",{"collection":1216,"item":1421},{"id":677,"status":6,"sort":13,"name":1422,"item":1423},"Connected Projects",[1424],{"collection":1391,"item":1425},{"id":142,"status":6,"slug":1426},"connected-projects",{"collection":1216,"item":1428},{"id":106,"status":6,"sort":13,"name":1429,"item":1430},"Plural handling",[1431],{"collection":1391,"item":1432},{"id":322,"status":6,"slug":1433},"plurals",{"collection":1216,"item":1435},{"id":110,"status":6,"sort":13,"name":1436,"item":1437},"Style guides",[1438],{"collection":1391,"item":1439},{"id":128,"status":6,"slug":1440},"style-guide",{"navigation_items_group_id":1442},{"id":382,"sort":295,"status":6,"name":1443,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1444},"Translation",[1445,1452,1459,1463,1470,1477,1485],{"collection":1216,"item":1446},{"id":549,"status":6,"sort":13,"name":1447,"item":1448},"Professional translations",[1449],{"collection":1399,"item":1450},{"id":321,"status":6,"slug":1451},"professional-translation-services",{"collection":1216,"item":1453},{"id":901,"status":6,"sort":13,"name":1454,"item":1455},"Crowdsourced translations",[1456],{"collection":1391,"item":1457},{"id":58,"status":6,"slug":1458},"share-tm",{"collection":1283,"item":1460},{"id":29,"status":6,"sort":13,"url":1461,"url_text":1462,"show_favorite_icon":14},"\u002Fdocs\u002Fgeneral\u002Ftranslating-strings","Translation interface",{"collection":1216,"item":1464},{"id":157,"status":6,"sort":13,"name":1465,"item":1466},"Machine translations",[1467],{"collection":1391,"item":1468},{"id":29,"status":6,"slug":1469},"machine-translation",{"collection":1216,"item":1471},{"id":68,"status":6,"sort":13,"name":1472,"item":1473},"Localazy AI translation",[1474],{"collection":1391,"item":1475},{"id":986,"status":6,"slug":1476},"localazy-ai",{"collection":1216,"item":1478},{"id":1479,"status":6,"sort":13,"name":1480,"item":1481},61,"Translation Memory",[1482],{"collection":1391,"item":1483},{"id":463,"status":6,"slug":1484},"translation-memory",{"collection":1216,"item":1486},{"id":400,"status":6,"sort":13,"name":1487,"item":1488},"Code & placeholders",[1489],{"collection":1391,"item":1490},{"id":321,"status":6,"slug":1491},"code-and-placeholders",{"navigation_items_group_id":1493},{"id":1033,"sort":58,"status":6,"name":1494,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1495},"Management",[1496,1500,1507,1515,1523,1530,1534],{"collection":1283,"item":1497},{"id":58,"status":6,"sort":13,"url":1498,"url_text":1499,"show_favorite_icon":14},"\u002Fdocs\u002Fgeneral\u002Fdefining-user-roles","User roles",{"collection":1216,"item":1501},{"id":101,"status":6,"sort":13,"name":1502,"item":1503},"Duplicity Linking",[1504],{"collection":1391,"item":1505},{"id":181,"status":6,"slug":1506},"duplicity-linking",{"collection":1216,"item":1508},{"id":1509,"status":6,"sort":13,"name":1510,"item":1511},52,"Language Permissions",[1512],{"collection":1391,"item":1513},{"id":554,"status":6,"slug":1514},"language-permissions",{"collection":1216,"item":1516},{"id":65,"status":1517,"sort":13,"name":1518,"item":1519},"draft","Automations",[1520],{"collection":1391,"item":1521},{"id":472,"status":6,"slug":1522},"automations",{"collection":1216,"item":1524},{"id":904,"status":6,"sort":13,"name":1525,"item":1526},"Branching",[1527],{"collection":1391,"item":1528},{"id":746,"status":6,"slug":1529},"branching",{"collection":1283,"item":1531},{"id":554,"status":1517,"sort":13,"url":1532,"url_text":1533,"show_favorite_icon":14},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fsso-configuration","SSO",{"collection":1283,"item":1535},{"id":1363,"status":1517,"sort":13,"url":1536,"url_text":1537,"show_favorite_icon":14},"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Flanguage-statistics","Reporting",{"navigation_items_group_id":1539},{"id":1132,"sort":59,"status":6,"name":1540,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1541},"Development",[1542,1548,1554,1561,1568,1575,1582],{"collection":1216,"item":1543},{"id":986,"status":6,"sort":13,"name":1112,"item":1544},[1545],{"collection":1391,"item":1546},{"id":844,"status":6,"slug":1547},"translation-api",{"collection":1216,"item":1549},{"id":5,"status":6,"sort":13,"name":1550,"item":1551},"Localazy CLI",[1552],{"collection":1391,"item":1553},{"id":295,"status":6,"slug":145},{"collection":1216,"item":1555},{"id":322,"status":6,"sort":13,"name":1556,"item":1557},"Language CDN",[1558],{"collection":1391,"item":1559},{"id":73,"status":6,"slug":1560},"language-cdn",{"collection":1216,"item":1562},{"id":1302,"status":6,"sort":13,"name":1563,"item":1564},"Releases",[1565],{"collection":1391,"item":1566},{"id":74,"status":6,"slug":1567},"releases",{"collection":1216,"item":1569},{"id":965,"status":1517,"sort":13,"name":1570,"item":1571},"Format Conversions",[1572],{"collection":1391,"item":1573},{"id":30,"status":6,"slug":1574},"format-conversions",{"collection":1216,"item":1576},{"id":47,"status":6,"sort":13,"name":1577,"item":1578},"Webhooks",[1579],{"collection":1391,"item":1580},{"id":375,"status":6,"slug":1581},"webhooks",{"collection":1216,"item":1583},{"id":499,"status":6,"sort":13,"name":1584,"item":1585},"Export Aliases",[1586],{"collection":1391,"item":1587},{"id":5,"status":6,"slug":1588},"export-aliases",{"id":73,"name":1124,"url":13,"url_text":13,"status":6,"groups":1590},[1591,1680],{"navigation_items_group_id":1592},{"id":295,"sort":393,"status":6,"name":1593,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1594},"Most popular",[1595],{"collection":1216,"item":1596},{"id":382,"status":6,"sort":13,"name":1124,"item":1597},[1598,1606,1613,1617,1621,1627,1631,1638,1642,1646,1650,1654,1658,1665,1672],{"collection":1599,"item":1600},"platforms",{"id":74,"status":6,"sort":142,"slug":1601,"name":1602,"icon":1603},"android","Android",{"id":1604,"title":1605},"ff965add-53b0-44ad-b27c-ea4ef641d384","Ic Outline Android",{"collection":1599,"item":1607},{"id":295,"status":6,"sort":30,"slug":1608,"name":1609,"icon":1610},"ios","iOS",{"id":1611,"title":1612},"886285d7-816a-4430-b5a5-edfe307b238e","Ios",{"collection":1599,"item":1614},{"id":5,"status":6,"sort":15,"slug":10,"name":9,"icon":1615},{"id":25,"title":1616},"Logos React",{"collection":1599,"item":1618},{"id":181,"status":6,"sort":73,"slug":184,"name":183,"icon":1619},{"id":191,"title":1620},"Vue",{"collection":1599,"item":1622},{"id":1139,"status":6,"sort":29,"slug":1623,"name":1624,"icon":1625},"angular","Angular",{"id":1626,"title":1624},"2a31a97a-48c5-4531-aa36-41c9dd0bdbef",{"collection":1599,"item":1628},{"id":142,"status":6,"sort":74,"slug":265,"name":264,"icon":1629},{"id":279,"title":1630},"Logos Flutter",{"collection":1599,"item":1632},{"id":15,"status":6,"sort":844,"slug":1633,"name":1634,"icon":1635},"typescript","TypeScript",{"id":1636,"title":1637},"8d1319b5-8a96-4199-8407-00add3418b1f","Logos Typescript Icon",{"collection":1599,"item":1639},{"id":375,"status":6,"sort":382,"slug":379,"name":378,"icon":1640},{"id":389,"title":1641},"Logos Javascript",{"collection":1599,"item":1643},{"id":382,"status":6,"sort":472,"slug":22,"name":470,"icon":1644},{"id":484,"title":1645},"Logos Json",{"collection":1599,"item":1647},{"id":554,"status":6,"sort":554,"slug":557,"name":556,"icon":1648},{"id":572,"title":1649},"Format",{"collection":1599,"item":1651},{"id":829,"status":6,"sort":836,"slug":833,"name":832,"icon":1652},{"id":840,"title":1653},"Strapi Logo Purple",{"collection":1599,"item":1655},{"id":68,"status":6,"sort":157,"slug":941,"name":940,"icon":1656},{"id":949,"title":1657},"Figma Icon",{"collection":1599,"item":1659},{"id":101,"status":6,"sort":132,"slug":1660,"name":1661,"icon":1662},"microsoft-excel","Microsoft Excel",{"id":1663,"title":1664},"7a175955-7b96-4561-939f-a0e1924faa40","Excel",{"collection":1599,"item":1666},{"id":112,"status":6,"sort":1479,"slug":1667,"name":1668,"icon":1669},"github-actions","GitHub Actions",{"id":1670,"title":1671},"da17554f-ac6d-443d-9bac-1f29645ec1c6","Github Icon",{"collection":1599,"item":1673},{"id":1674,"status":6,"sort":1675,"slug":1676,"name":1677,"icon":1678},97,999,"webflow","Webflow",{"id":1679,"title":1677},"ff43a386-52f8-499f-b77c-ab9a30f4a77e",{"navigation_items_group_id":1681},{"id":73,"sort":844,"status":6,"name":1682,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1683},"Explore more",[1684],{"collection":1685,"item":1686},"text_link_navigation_item_type",{"id":142,"status":6,"sort":13,"text":1687,"url":1688,"url_text":1689},"Localazy is a technology-agnostic platform supporting 50+ frameworks, file formats & popular tools.","\u002Fintegrations","See all integrations",{"id":142,"name":1128,"url":13,"url_text":13,"status":6,"groups":1691},[1692,1716,1722],{"navigation_items_group_id":1693},{"id":142,"sort":382,"status":6,"name":1694,"render_show_all_url":14,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":13,"represent_as_tile":14,"items":1695},"Helpful Links",[1696,1699,1701,1705,1707,1710,1712],{"collection":1283,"item":1697},{"id":1033,"status":6,"sort":13,"url":1147,"url_text":1698,"show_favorite_icon":16},"Localazy Blog",{"collection":1283,"item":1700},{"id":1132,"status":6,"sort":13,"url":978,"url_text":1133,"show_favorite_icon":16},{"collection":1283,"item":1702},{"id":142,"status":6,"sort":13,"url":1703,"url_text":1704,"show_favorite_icon":14},"https:\u002F\u002Fdiscuss.localazy.com\u002F","Discussion Forum",{"collection":1283,"item":1706},{"id":382,"status":6,"sort":13,"url":1141,"url_text":1140,"show_favorite_icon":14},{"collection":1283,"item":1708},{"id":15,"status":6,"sort":13,"url":1091,"url_text":1709,"show_favorite_icon":14},"Become a Partner",{"collection":1283,"item":1711},{"id":1135,"status":6,"sort":13,"url":1150,"url_text":1149,"show_favorite_icon":14},{"collection":1283,"item":1713},{"id":859,"status":6,"sort":13,"url":1714,"url_text":1715,"show_favorite_icon":14},"\u002Ftags\u002Frelease-update","Release Updates",{"navigation_items_group_id":1717},{"id":30,"sort":1132,"status":6,"name":1698,"render_show_all_url":16,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":1147,"represent_as_tile":14,"items":1718},[1719],{"collection":1207,"item":1720},{"id":15,"status":6,"sort":13,"show_author_img":14,"blog_post_tag":1721,"description":13},"[USE LATEST FEATURED]",{"navigation_items_group_id":1723},{"id":74,"sort":1033,"status":6,"name":1133,"render_show_all_url":16,"show_all_url_position":1204,"show_favorite_icon":14,"show_all_url":978,"represent_as_tile":14,"items":1724},[1725,1739,1750,1759,1770,1780,1791,1799],{"collection":1216,"item":1726},{"id":73,"status":6,"sort":13,"name":1727,"item":1728},"General",[1729],{"collection":1730,"item":1731},"docs_section",{"id":30,"status":6,"sort":142,"slug":1732,"name":1727,"icon":1733,"featured_icon":1736},"general",{"id":1734,"title":1735},"423101f1-308c-42f1-8dfe-53272019e7cb","Global",{"id":1737,"title":1738},"0f7ca4cb-dc3b-4f62-b476-132ed5c4931f","General Doc",{"collection":1216,"item":1740},{"id":29,"status":6,"sort":13,"name":144,"item":1741},[1742],{"collection":1730,"item":1743},{"id":15,"status":6,"sort":30,"slug":145,"name":144,"icon":1744,"featured_icon":1747},{"id":1745,"title":1746},"2f7a4573-8265-4d76-8d55-ce0cc79b8983","Cli",{"id":1748,"title":1749},"3f76ff7b-0e74-4046-bb03-4ca99c3b66d5","Doc Cat Cli",{"collection":1216,"item":1751},{"id":58,"status":6,"sort":13,"name":75,"item":1752},[1753],{"collection":1730,"item":1754},{"id":472,"status":6,"sort":15,"slug":76,"name":75,"icon":1755,"featured_icon":1756},{"id":1745,"title":1746},{"id":1757,"title":1758},"20866781-e69b-4e01-9456-05437487b75c","API Doc",{"collection":1216,"item":1760},{"id":43,"status":6,"sort":13,"name":1761,"item":1762},"CDN",[1763],{"collection":1730,"item":1764},{"id":740,"status":6,"sort":73,"slug":1765,"name":1761,"icon":1766,"featured_icon":1767},"cdn",{"id":1734,"title":1735},{"id":1768,"title":1769},"a8ee9cb7-4e02-41f0-b595-eb518c3085b6","Doc Cat Cdn",{"collection":1216,"item":1771},{"id":74,"status":6,"sort":13,"name":1602,"item":1772},[1773],{"collection":1730,"item":1774},{"id":142,"status":6,"sort":29,"slug":1601,"name":1602,"icon":1775,"featured_icon":1777},{"id":1776,"title":1602},"fb8329ae-0c0c-4fbc-bcdc-83f2eeda1039",{"id":1778,"title":1779},"f7c0dec8-5b42-4943-ab3a-e3665723ad6f","Doc Cat Android",{"collection":1216,"item":1781},{"id":295,"status":6,"sort":13,"name":1609,"item":1782},[1783],{"collection":1730,"item":1784},{"id":73,"status":6,"sort":74,"slug":1608,"name":1609,"icon":1785,"featured_icon":1788},{"id":1786,"title":1787},"289e136c-55df-4d51-847b-1782a2308ee4","Ios Blue",{"id":1789,"title":1790},"2968d3f0-14b5-4427-82e7-f1ea2de17846","Doc Cat Ios",{"collection":1216,"item":1792},{"id":59,"status":6,"sort":13,"name":940,"item":1793},[1794],{"collection":1730,"item":1795},{"id":554,"status":6,"sort":295,"slug":941,"name":940,"icon":1796,"featured_icon":1797},{"id":1745,"title":1746},{"id":1798,"title":940},"f5e66b5b-a439-47f6-af4a-6ad261de2e87",{"collection":1216,"item":1800},{"id":393,"status":6,"sort":13,"name":832,"item":1801},[1802],{"collection":1730,"item":1803},{"id":982,"status":6,"sort":58,"slug":833,"name":832,"icon":1804,"featured_icon":1806},{"id":1805,"title":832},"3b4b03c7-e131-49e6-a014-c8c2c8a2751e",{"id":1807,"title":1808},"1dd05c76-e517-4aea-a3d8-49cfddb40056","Strapi Doc",{"id":15,"name":1152,"url":1153,"url_text":1152,"status":6,"groups":1810},[],{"id":74,"name":1077,"url":1812,"url_text":1077,"status":6,"groups":1813},"\u002Fbook-demo",[],{"id":1815,"owner":1816,"created_by":13,"sort":13,"title":1821,"slug":1822,"modified_on":1042,"created_on":1823,"pinned":14,"badge":13,"priority":1824,"main_image":1825,"status":6,"tags":1826,"dictionary":1834,"reading_time":1835,"excerpt":-1,"og_title":1042,"og_description":1042,"og_image":1042},"69d78a237ab1270001eddabf",{"id":1817,"first_name":1818,"last_name":1042,"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":68,"created_on":1828,"status":6,"label":75,"slug":76,"on_index_page":14},"2026-06-08 21:10:05",{"id":106,"created_on":1828,"status":6,"label":1830,"slug":1831,"on_index_page":16},"AI","ai",{"id":68,"created_on":1828,"status":6,"label":1384,"slug":1833,"on_index_page":16},"localization",[],0,{"id":1837,"owner":1838,"created_by":13,"sort":13,"title":1843,"slug":1844,"modified_on":1042,"created_on":1845,"pinned":14,"badge":13,"priority":1824,"main_image":1846,"status":6,"tags":1847,"dictionary":1855,"reading_time":1835,"excerpt":-1,"og_title":1042,"og_description":1042,"og_image":1042},"6a145e3f8550a300014081e4",{"id":1839,"first_name":1840,"last_name":1042,"slug":1841,"avatar":1842},"65647a510470910001942876","Dorota Pawlak","dorota-pawlak","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2024\u002F07\u002Fdorota.png","The great LLM translation war, pt. 2: Context beats model choice in 2026","the-great-llm-translation-war-pt-2-2026","2026-06-05T14:56:58.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2026\u002F06\u002Flocalazy-AI-series-11.png",[1848,1849,1852],{"id":106,"created_on":1828,"status":6,"label":1830,"slug":1831,"on_index_page":16},{"id":106,"created_on":1828,"status":6,"label":1850,"slug":1851,"on_index_page":14},"ChatGPT","chatgpt",{"id":68,"created_on":1828,"status":6,"label":1853,"slug":1854,"on_index_page":14},"Translations","translations",[],{"post":1857,"relatedPosts":2047,"banner":2105},{"id":1858,"owner":1859,"created_by":13,"sort":13,"title":1864,"slug":1865,"modified_on":1866,"created_on":1866,"pinned":16,"badge":13,"priority":1824,"main_image":1867,"status":6,"tags":1868,"dictionary":1877,"reading_time":859,"excerpt":1951,"og_title":1042,"og_description":1042,"og_image":1042,"content":1952,"meta_title":1042,"meta_description":1042,"canonical":1042,"cta":1953,"fullGhostPost":1961},"649de936047091000193d3a3",{"id":1860,"first_name":1861,"last_name":1042,"slug":1862,"avatar":1863},"619d2332df4bcb00010bc032","Moyinoluwa Adenuga","moyinoluwa-adenuga","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fadenuga.png","How to integrate Localazy into Vercel builds for frontend applications","how-to-integrate-localazy-into-vercel-builds-for-frontend-applications","2023-07-12T11:36:54.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F06\u002FVercel.png",[1869,1872,1875,1876],{"id":106,"created_on":1828,"status":6,"label":1870,"slug":1871,"on_index_page":14},"Vercel","vercel",{"id":68,"created_on":1828,"status":6,"label":1873,"slug":1874,"on_index_page":14},"HowTo","howto",{"id":68,"created_on":1828,"status":6,"label":144,"slug":145,"on_index_page":14},{"id":68,"created_on":1828,"status":6,"label":9,"slug":10,"on_index_page":14},[1878,1883,1890,1905,1920,1933,1944],{"id":403,"status":6,"owner":1879,"created_on":1880,"title":9,"excerpt":1881,"content":1881,"slug":10,"meta_title":1042,"meta_description":13,"canonical":13,"related_terms":1882},"2bac48a8-b362-482f-b574-3bc71dca4c5b","2022-03-17T12:22:55.000Z","React is a development kit written in NodeJS. It is used for building frontend components of applications. Notable apps that use React include Facebook and Netflix.\n",[],{"id":1884,"status":6,"owner":1879,"created_on":1880,"title":1624,"excerpt":1885,"content":1886,"slug":1623,"meta_title":1042,"meta_description":13,"canonical":13,"related_terms":1887},69,"Angular is a TypeScript-based open-source platform for building mobile and desktop web applications. ","Angular enables you to build applications that range from simple, single-developer projects to enterprise-level applications.\n\nThe Angular platform consists of:\n- a framework for building scalable web applications that consist of several individual components,\n- an extensive collection of integrated libraries that support the development of application features, including routing, forms management, and client-server communication,\n- a set of tools designed to help you write code, build software, test your work, and update your applications.\n\nGoogle designed Angular as a ground-up rewrite of AngularJS. Angular has been developed and maintained by Google developers since 2016 with help from a community of individuals and corporations. \n\nYou can learn more about Angular on the [official website](https:\u002F\u002Fangular.io\u002F).\n\nRelated links:\n[How to localize Angular app with angular-i18n and Localazy](\u002Fblog\u002Flocalize-angular-app-i18n-l10n-localazy)",[1888],{"id":1889,"slug":1633},74,{"id":1891,"status":6,"owner":1879,"created_on":1892,"title":1893,"excerpt":1894,"content":1895,"slug":1896,"meta_title":1042,"meta_description":1042,"canonical":1042,"related_terms":1897},79,"2026-05-12T07:09:23.000Z","Internationalization (i18n)","The process of making your software localizable.","Internationalization (i18n) is the process of preparing software, digital products, and content so they can be easily adapted for various languages, regions, and cultures without requiring extensive reengineering.\n\nThis foundational step ensures that a product can be efficiently localized to meet the needs of different global markets. To internationalize your software, you need to pay attention to technical requirements. The code structure and design has to be prepared to allow for [localization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Flocalization).\n\nIt involves considering various linguistic and cultural factors during the initial design and development phases. This process should start, ideally, in the design phase. For example, you may want to have externalised strings so you can bring your strings to the translation management tool.\n\nEvery business looking to expand their reach and provide User Experiences (UX) across diverse markets needs to consider internationalization and then localization.\n\n## 🌐 Key points about internationalization (i18n): \n\n* Internationalization involves creating flexible and adaptable designs that accommodate various languages, scripts, and cultural norms.\n* By preparing content and software for localization, internationalization simplifies the process of translating and adapting products for specific markets.\n* This process includes using Unicode, supporting different character sets, and ensuring compatibility with various regional formats (dates, currencies, etc.).\n* Investing in internationalization upfront reduces the time and cost associated with localizing products for multiple markets.\n\nBy prioritizing internationalization, companies can create products that are more versatile and ready for global distribution, ensuring they meet the needs of international users effectively.","internationalization",[1898,1899,1901,1903],{"id":30,"slug":1833},{"id":73,"slug":1900},"translation",{"id":29,"slug":1902},"globalization",{"id":59,"slug":1904},"gilt",{"id":1906,"status":6,"owner":1879,"created_on":1880,"title":378,"excerpt":1907,"content":1908,"slug":379,"meta_title":1042,"meta_description":13,"canonical":13,"related_terms":1909},75,"JavaScript is a scripting language that allows developers to create interactive web interfaces.","JavaScript is a scripting language that makes it possible to dynamically update content, control multimedia, animate images, and achieve many other things. Most websites use JavaScript on the client-side to change how pages look and behave when users interact with them. JavaScript is most well-known as the scripting language for web interfaces, although many non-browser environments also use it, such as [Node.js](\u002Fdictionary\u002Fnodejs). \n\nJavaScript first appeared in 1995. Brendan Eich of Netscape initially designed it, but others have also contributed to the ECMAScript standard that forms the basis of JavaScript.\n\nJavaScript is the basis for many popular web development frameworks, such as:\n- [Vue.js](\u002Fdictionary\u002Fvuejs)\n- [Angular](\u002Fdictionary\u002Fangular)\n- [React](\u002Fdictionary\u002Freact)\n\nLocalazy supports [integrations](\u002Fintegrations) with many JavaScript frameworks and file formats.\n\n## Helpful resources:\n- [MDN Web Docs - JavaScript](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript) \n- [JavaScript.com Learning Resources](https:\u002F\u002Fwww.javascript.com\u002F)\n- [Tutorial: How to localize JavaScript project with Localazy](\u002Fblog\u002Fjavascript-app-localization-i18next-localazy)",[1910,1911,1912,1913,1914,1917],{"id":1889,"slug":1633},{"id":403,"slug":10},{"id":1884,"slug":1623},{"id":406,"slug":184},{"id":1915,"slug":1916},80,"nodejs",{"id":1918,"slug":1919},77,"nuxt",{"id":781,"status":6,"owner":1879,"created_on":1921,"title":470,"excerpt":1922,"content":1923,"slug":22,"meta_title":13,"meta_description":13,"canonical":13,"related_terms":1924},"2022-03-17T12:22:56.000Z","JSON stands for JavaScript Object Notation and it's a widely used file format.","JSON is a lightweight format for storing and transporting data originally specified by Douglas Crockford in the early 2000s. It is often used when data is sent from a server to a web page.  It is \"self-describing\" and highly understandable, as it is easy for humans to read and write and for machines to parse and generate.\n\nThis programming language is independent but it is derived from the JavaScript\u002FECMAScript programming language and uses the conventions familiar to programmers of the C series of languages ​​(including C, C++, C#, Java, JavaScript, Perl, and Python).\n\nJSON is one of the best localizable file formats you can use to store your project's externalized strings. Localazy fully supports and lets you manage and translate your JSON files. \n\n## Further reading:\n- [Quick Start - JSON](https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fquick-start-json)\n- [File Format - JSON](https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fjson-format)\n- [JavaScript app localization with i18next and Localazy](https:\u002F\u002Flocalazy.com\u002Fblog\u002Fjavascript-app-localization-i18next-localazy)",[1925,1927,1929,1930],{"id":740,"slug":1926},"java",{"id":68,"slug":1928},"externalized-string",{"id":1906,"slug":379},{"id":1931,"slug":1932},83,"python",{"id":30,"status":6,"owner":1879,"created_on":1934,"title":1384,"excerpt":1935,"content":1936,"slug":1833,"meta_title":13,"meta_description":13,"canonical":13,"related_terms":1937},"2022-03-17T12:22:54.000Z","The process of preparing a product for a particular market.","Localization (l10n) is an essential part of the **[internationalization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Finternationalization)** process. During localization, a product is prepared to be used in a particular destination, language and culture. Part of the localization process consists of changing locales such as currency, text orientation, or date format; and aligning the product with local, technical, or legislative requirements.\n\nA crucial part of localization is **[translation](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Ftranslation\u002F)**.\n\nLocalization is the process of adapting an internationalized product to meet the specific needs of a target market by translating it into the native language of that market. This includes translating the user interface, text, graphics, and other content to match the specific target locale.\n\nThe goal of localization is to provide an optimal user experience for the target market, as well as to make the product accessible to a wider audience. This process often involves more than just translation, and may include adjusting graphics, changing text length to accommodate different writing systems, and modifying the product's layout to fit cultural differences.\n\nInternationalization and localization are essential components of **[globalization](https:\u002F\u002Flocalazy.com\u002Fdictionary\u002Fglobalization)** (g11n) and play a key role in expanding a product's reach and success. It's important to ensure that any Creative Commons attribution is considered during localization to prevent copyright infringement.\n\nBy localizing products, companies can reach new markets and increase their customer base, ultimately helping their business grow and thrive. The number of letters in the term i18n and l10n refers to the number of characters between the first and last letters in the term, and is used as a shorthand for internationalization and localization, respectively.",[1938,1939,1940,1941,1943],{"id":30,"slug":1833},{"id":73,"slug":1900},{"id":59,"slug":1904},{"id":97,"slug":1942},"translation-management-system-tms",{"id":1891,"slug":1896},{"id":406,"status":6,"owner":1879,"created_on":1880,"title":183,"excerpt":1945,"content":1946,"slug":184,"meta_title":1042,"meta_description":13,"canonical":13,"related_terms":1947},"Vue.js is an open-source, front-end JavaScript framework for creating web user interfaces.","You can think of Vue.js as an alternative to [Angular](\u002Fdictionary\u002Fangular) or [React](\u002Fdictionary\u002Freact). \n\nVue.js is a [JavaScript](\u002Fdictionary\u002Fjavascript) front-end framework created by Evan You. Evan created Vue.js in 2014 and still leads its development today. Along with the other core team members, he is actively developing its library and adding features to it rapidly through the efforts of many contributors.\n\nVue.js focuses on simplicity, flexibility, and performance. It can also be applied to both desktop and mobile app development, thanks to the HTML extensions and JS base working in tandem with an Electron framework.\n\n**Fun fact:** Vue.js is our favorite framework and is one of the key components in the tech stack of Localazy developers.\n\nLocalazy is fully ready to help you localize your Vue.js projects, with the help of [vue-i18n library](https:\u002F\u002Fgithub.com\u002Fkazupon\u002Fvue-i18n), sponsored by Localazy.\n\n## Related links\n[How to localize Vue.js app with vue-i18n and Localazy](\u002Fblog\u002Fhow-to-localize-vuejs-app-with-vue-i18n-and-localazy)",[1948,1949,1950],{"id":403,"slug":10},{"id":1884,"slug":1623},{"id":1906,"slug":379},"Learn how to streamline the localization workflow of your apps on Vercel with Localazy in this comprehensive tutorial by Moyinoluwa Adenuga.","\u003Cp>Localization has made it easy to create applications for users in different geographic regions by ensuring that users can access them in the language they understand. \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\">Localazy\u003C\u002Fa> simplifies and automates the language translation process, making it effortless to implement localization. This reduces manual errors, which could occur when moving files or copying and pasting translated strings.\u003C\u002Fp>\u003Ch4 id=\"what-is-vercel\">What is Vercel?\u003C\u002Fh4>\u003Cp>\u003Ca href=\"https:\u002F\u002Fvercel.com\u002F\">Vercel\u003C\u002Fa> is a deployment platform for front-end projects. It provides support for deployments of various frontend \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fframeworks#list-of-supported-frameworks\">frameworks\u003C\u002Fa>. The main features offered include branch previews with automatic builds and deployment for projects. Integrating Localazy into Vercel builds can be done for new and existing projects.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-35.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1920\" height=\"969\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-35.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-35.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2023\u002F07\u002Fimage-35.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-35.png 1920w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>\u003Ca href=\"https:\u002F\u002Fvercel.com\u002F\">Vercel.com Homepage\u003C\u002Fa>\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"benefits-of-integrating-localized-applications-with-vercel-build\">📌 Benefits of integrating localized applications with Vercel build \u003Ca class=\"markdownit-header-anchor\" href=\"#benefits-of-integrating-localized-applications-with-vercel-build\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>There are several benefits to using Localazy with Vercel:\u003C\u002Fp>\u003Cul>\u003Cli>Easier management of downloading translations as they do not have to be downloaded locally in the code base. A rerun of the deployment would trigger the translation downloads.\u003C\u002Fli>\u003Cli>Faster deployment and shipping of applications. 🌠\u003C\u002Fli>\u003Cli>Use of preview branches with Localazy release tags for QA inspections before merging PR into release branches.\u003C\u002Fli>\u003Cli>It speeds up the development process as developers can focus on building applications while using an automated process for managing translations and deployments. 🔥\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"sample-application\">🏗️ Sample Application \u003Ca class=\"markdownit-header-anchor\" href=\"#sample-application\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>In this tutorial, we will create an application that translates Idioms from English to other languages such as Spanish, Czech, and Finnish. We will upload our strings to Localazy whenever a commit is made using the \u003Ca href=\"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgithooks#_pre_commit\">git pre-commit hook\u003C\u002Fa> and download the translated strings before building on Vercel. Release tags for staging and production will be used to manage translations in different environments.\u003C\u002Fp>\u003Cblockquote>Tip: If you have an existing localized project you would like to use, skip to the next section. You will be integrating your existing project and will not end up with the sample application we will create in this tutorial.\u003C\u002Fblockquote>\u003Ch2 id=\"getting-started\">🏁 Getting started \u003Ca class=\"markdownit-header-anchor\" href=\"#getting-started\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>For a smooth ride during this tutorial, it is important to have a basic understanding of git commands and how to set up a git repository, e.g., \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftags\u002Fgithub\">GitHub\u003C\u002Fa>, Bitbucket, GitLab, etc. Experience writing deployment scripts is nice to have as it will come in handy, but you can follow along well without it, as the tutorial simplifies the concepts.\u003C\u002Fp>\u003Ch3 id=\"set-up-the-localized-application\">Set up the Localized application \u003Ca class=\"markdownit-header-anchor\" href=\"#set-up-the-localized-application\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>For new projects, the first step is to create an application. I will use a React application but feel free to use your preferred framework or library. The localization steps will differ based on the framework being used.\u003C\u002Fp>\u003Cp>If you are not using React, check these links and follow just the steps needed to create and set up your sample localized project:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-localize-vuejs-app-with-vue-i18n-and-localazy\">Vue.js\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Flocalize-angular-app-i18n-l10n-localazy\">Angular\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-localize-nuxt-v3-using-localazy\">Nuxt.js\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>When done setting up the localized project, continue reading here. Some of the steps might have been done already, and you might just need to modify others.\u003C\u002Fp>\u003Cp>If you are going to use React with me, let’s go right into it.\u003C\u002Fp>\u003Ch3 id=\"create-application\">Create application \u003Ca class=\"markdownit-header-anchor\" href=\"#create-application\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Create a new project named \u003Ccode>localazy-vercel-integration\u003C\u002Fcode> using the command:\u003C\u002Fp>\u003Cpre>\u003Ccode>npx create-react-app localazy-vercel-integration\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"install-i18n-packages\">Install i18n packages \u003Ca class=\"markdownit-header-anchor\" href=\"#install-i18n-packages\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>To allow for the localization of our application, we need to use the internationalization framework for React. Install it by running the command:\u003C\u002Fp>\u003Cpre>\u003Ccode>npm install react-i18next i18next\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"set-up-source-strings-to-be-used-in-the-application\">Set up source strings to be used in the application \u003Ca class=\"markdownit-header-anchor\" href=\"#set-up-source-strings-to-be-used-in-the-application\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Create a file called \u003Ccode>en.json\u003C\u002Fcode> with a file path of  \u003Ccode>assets\u002Flocales\u002Fen.json\u003C\u002Fcode> in the \u003Ccode>src\u003C\u002Fcode> directory. Store the source strings to be used in the application here.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F src\u002Fassets\u002Flocales\u002Fen.json\n\n{\n    \"heading\": \"Translating idioms from English to {{lang}}\",\n    \"idioms\": [\n        \"a friend in need is a friend indeed\",\n        \"cast pearls before swine\",\n        \"curiosity killed the cat\",\n        \"don't judge a book by its cover\",\n        \"early bird catches the worm\",\n        \"fall on deaf ears\",\n        \"hit the nail on the head\",\n        \"it's raining cats and dogs\",\n        \"jump to conclusions\",\n        \"kill two birds with one stone\"\n    ],\n    \"english\": \"English\",\n    \"translate_to\": \"Translate to\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"set-up-the-application-to-use-localized-strings\">Set up the application to use Localized strings \u003Ca class=\"markdownit-header-anchor\" href=\"#set-up-the-application-to-use-localized-strings\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>To set it up, create \u003Ccode>i18n.js\u003C\u002Fcode>  in the src directory and paste the code below.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F src\u002Fi18n.js\n\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nconst resources = {\n  en: {\n    translation: require('.\u002Fassets\u002Flocales\u002Fen.json')\n  },\n  cs: {\n    translation: require('.\u002Fassets\u002Flocales\u002Fcs.json')\n  },\n  es: {\n    translation: require('.\u002Fassets\u002Flocales\u002Fes.json')\n  },\n  fi: {\n    translation: require('.\u002Fassets\u002Flocales\u002Ffi.json')\n  }\n}\n\ni18n\n  .use(initReactI18next)\n  .init({\n    resources,\n    lng: \"en\",\n    fallbackLng: \"en\"\n});\n\n\nexport default i18n;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Breakdown of the properties used in the code snippet above and what it does:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>resources:\u003C\u002Fstrong> is used to access and store all the localized files. The strings are imported from the locales folder. The resources contain the different languages the application will use, both the source file and the files that the source strings will be translated to.\u003C\u002Fli>\u003Cli>\u003Cstrong>lng:\u003C\u002Fstrong> is the default language to be used in the application. It is set to use English.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwww.i18next.com\u002Fprinciples\u002Ffallback#language-fallback\">fallbackLng\u003C\u002Fa>:\u003C\u002Fstrong> is the language to be used when a translation does not exist in the selected locale or no language is chosen. It is set to use English.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Other configuration options can be found \u003Ca href=\"https:\u002F\u002Fwww.i18next.com\u002Foverview\u002Fconfiguration-options\">here\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>If you are running your application locally, you are likely to have an error at this stage. This is because the translation JSON files do not exist yet until they are downloaded from Localazy.\u003C\u002Fp>\u003Cp>Create the JSON files and add an empty object to them to fix the error. The folder directory should look like this:\u003Cbr>\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-3.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"466\" height=\"290\">\u003C\u002Ffigure>\u003Cp>In the \u003Ccode>index.js\u003C\u002Fcode> file where the application is rendered, import the \u003Ccode>i18n\u003C\u002Fcode> file created, which makes the locale languages available across the whole application.\u003C\u002Fp>\u003Cpre>\u003Ccode> \u002F\u002F src\u002Findex.js\n\nimport React from 'react';\nimport ReactDOM from 'react-dom\u002Fclient';\nimport '.\u002Findex.css';\nimport \".\u002Fi18n\"\nimport App from '.\u002FApp';\nimport reportWebVitals from '.\u002FreportWebVitals';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  &lt;React.StrictMode&gt;\n    &lt;App \u002F&gt;\n  &lt;\u002FReact.StrictMode&gt;\n);\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"use-localized-strings-in-the-application\">Use Localized strings in the application \u003Ca class=\"markdownit-header-anchor\" href=\"#use-localized-strings-in-the-application\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Modify the \u003Ccode>App.js\u003C\u002Fcode> file to use the localized strings. This creates a simple table layout with English words and their translations to Czech, Finnish, or Spanish.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F src\u002FApp.js\n\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport '.\u002FApp.css';\n\nfunction App() {\n  const { t, i18n } = useTranslation();\n\n  \u002F\u002F create state to manage language to be translated to\n  const [language, setLanguage] = useState(\"cs\");\n\n  const changeLanguage = (e) =&gt; {\n    i18n.changeLanguage(e.target.value);\n  };\n  \n  let idioms = t('idioms', { returnObjects: true });\n\n  const getLanguage = (lang) =&gt; {\n    let fullLanguage;\n\n    switch (lang) {\n      case \"cs\":\n        fullLanguage = \"Czech\";\n        break;\n      case \"fi\":\n        fullLanguage = \"Finnish\";\n        break;\n      case \"es\":\n        fullLanguage = \"Spanish\";\n        break;\n      default:\n        fullLanguage = \"Czech\";\n    }\n\n    return fullLanguage;\n  }\n\n  return (\n    &lt;div className=\"App\"&gt;\n      &lt;h1&gt;{t('heading', { lang: getLanguage(language), lng: \"en\"})}&lt;\u002Fh1&gt;\n      &lt;div&gt;\n        {t('translate_to', lng: \"en\")}\n        &lt;select onChange={changeLanguage} value={language}&gt;\n          &lt;option value=\"cs\"&gt;Czech&lt;\u002Foption&gt;\n          &lt;option value=\"fi\"&gt;Finnish&lt;\u002Foption&gt;\n          &lt;option value=\"es\"&gt;Spanish&lt;\u002Foption&gt;\n        &lt;\u002Fselect&gt;\n      &lt;\u002Fdiv&gt;\n      &lt;table&gt;\n        &lt;thead&gt;\n          &lt;tr&gt;\n            &lt;th&gt;S\u002FN&lt;\u002Fth&gt;\n            &lt;th&gt;{t('english')}&lt;\u002Fth&gt;\n            &lt;th&gt;{getLanguage(language)}&lt;\u002Fth&gt;\n          &lt;\u002Ftr&gt;\n        &lt;\u002Fthead&gt;\n        &lt;tbody&gt;\n          {\n            t('idioms', { returnObjects: true, lng: \"en\" }).map((idiom, index) =&gt; \n              &lt;tr key={index}&gt;\n                &lt;td&gt;{index + 1}&lt;\u002Ftd&gt;\n                &lt;td&gt;{idiom}&lt;\u002Ftd&gt;\n                &lt;td&gt;{idioms[index]}&lt;\u002Ftd&gt;\n              &lt;\u002Ftr&gt;\n            )\n          }\n        &lt;\u002Ftbody&gt;\n      &lt;\u002Ftable&gt;\n    &lt;\u002Fdiv&gt;\n  );\n}\n\nexport default App;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the code above,\u003C\u002Fp>\u003Cul>\u003Cli>the default language to be translated to is set to Czech, but as the file is yet to be uploaded, translated, and downloaded, the fallback language English will be used.\u003C\u002Fli>\u003Cli>the string \u003Ccode>heading\u003C\u002Fcode>, \u003Ccode>translate_to\u003C\u002Fcode>, and the first column of the table are set to always use English as the \u003Ccode>lng\u003C\u002Fcode> option is set to \u003Ccode>en\u003C\u002Fcode>. If you do not want this behavior, remove the \u003Ccode>lng\u003C\u002Fcode> option passed.\u003C\u002Fli>\u003Cli>the \u003Ccode>useEffect\u003C\u002Fcode> hook runs when the language is updated to ensure the i18n changeLanguage method is called.\u003C\u002Fli>\u003Cli>the \u003Ccode>getLanguage\u003C\u002Fcode> function is used to generate the language from the language code, e.g., Czech from \u003Ccode>cs\u003C\u002Fcode>.\u003C\u002Fli>\u003Cli>the \u003Ccode>select onChange\u003C\u002Fcode> event updates the language state, which triggers the \u003Ccode>useEffect\u003C\u002Fcode> hook.\u003C\u002Fli>\u003C\u002Ful>\u003Ch3 id=\"view-application\">View application \u003Ca class=\"markdownit-header-anchor\" href=\"#view-application\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>View the current state of the application by running the following:\u003C\u002Fp>\u003Cpre>\u003Ccode>npm start\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Confirm the localized strings are used.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-4.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"884\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-4.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-4.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-4.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The custom CSS styling used can be found \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMoyinoluwaA\u002FLocalazy-Vercel-Integration\u002Fblob\u002Fmaster\u002Fsrc\u002FApp.css\">here\u003C\u002Fa>.\u003C\u002Fp>\u003Ch2 id=\"set-up-localazy\">🚩 Set up Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#set-up-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Now we are getting to the main goal of our tutorial.\u003C\u002Fp>\u003Ch3 id=\"create-a-project-on-localazy\">Create a project on Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#create-a-project-on-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Log in or create a \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\">Localazy\u003C\u002Fa> account if you do not have one.\u003C\u002Fp>\u003Cblockquote>Tip: You can learn \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fgetting-started-with-localazy\">how to get started with Localazy\u003C\u002Fa> in the documentation.\u003C\u002Fblockquote>\u003Cp>Create a new project.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-5.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"716\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-5.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-5.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-5.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Enter a project name of choice. I named the project \u003Cem>translate-idioms-from-english,\u003C\u002Fem> but you can decide to use a different name. \u003C\u002Fp>\u003Cblockquote>By the way: You can help us properly translate various idioms into your language in the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fp\u002Ftranslate-idioms\">'Translate Idioms'\u003C\u002Fa> community project, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-translate-idioms-the-right-way\">learn more on the blog\u003C\u002Fa>.\u003C\u002Fblockquote>\u003Cp>The source language is set to English, as the strings to be uploaded will be in English. Change the source language if you will be using a different language. Then, click the create new project button.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-6.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"1166\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-6.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-6.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-6.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"publish-release-tags-optional\">Publish release tags (optional) \u003Ca class=\"markdownit-header-anchor\" href=\"#publish-release-tags-optional\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Frelease-tags\">Release tags\u003C\u002Fa> are used to maintain multiple existing \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Freleases\">releases\u003C\u002Fa> which are used in different environments to ensure that each environment has only the translations needed. This prevents unwanted changes from getting to the live environment and allows us to decide when we want to publish new changes.\u003C\u002Fp>\u003Cp>By default, the latest tag is used for all uploads and downloads when a tag is not specified.\u003C\u002Fp>\u003Cblockquote>⚠️ Currently, Releases are available in the\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftiers\u002Fprofessional\"> Professional tier\u003C\u002Fa> and higher. If you are on the free tier, you will need to upgrade your account plan to use this feature.\u003C\u002Fblockquote>\u003Cp>Navigate to the releases section on the project dashboard:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-7.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1146\" height=\"904\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-7.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-7.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-7.png 1146w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Click on the \u003Cstrong>Add new release\u003C\u002Fstrong> button or the ‘+’ icon to create a new release tag. Input a release tag name and publish the release.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-8.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"707\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-8.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-8.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-8.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>I published staging and production release tags.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-9.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"464\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-9.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-9.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-9.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Now, we will go back to our application code.\u003C\u002Fp>\u003Ch2 id=\"integrate-localazy-using-the-cli\">👨‍💻 Integrate Localazy using the CLI \u003Ca class=\"markdownit-header-anchor\" href=\"#integrate-localazy-using-the-cli\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Ch3 id=\"install-localazy-cli\">Install Localazy CLI \u003Ca class=\"markdownit-header-anchor\" href=\"#install-localazy-cli\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Install the\u003Cem> \u003C\u002Fem>\u003Cstrong>Localazy \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">CLI\u003C\u002Fa>\u003C\u002Fstrong>\u003Cem> \u003C\u002Fem>locally\u003Cem> \u003C\u002Fem>as a dev dependency\u003Cem> \u003C\u002Fem>using the npm package to enable anyone that runs the code to install it when running the \u003Ccode>npm install\u003C\u002Fcode> command. Use the command\u003C\u002Fp>\u003Cpre>\u003Ccode>npm i --save-dev @localazy\u002Fcli\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"create-a-localazykeysjson-file\">Create a localazy.keys.json file \u003Ca class=\"markdownit-header-anchor\" href=\"#create-a-localazykeysjson-file\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>We will store our write and read keys in this file to keep it secure. In the root folder, create a \u003Ccode>localazy.keys.json\u003C\u002Fcode> to store the authorization keys needed for the Localazy CLI using the format shown below. The \u003Cstrong>writeKey \u003C\u002Fstrong>and\u003Cstrong> readKey\u003C\u002Fstrong> are used to authorize the request.\u003C\u002Fp>\u003Cp>Navigate to the Localazy project directory and the settings tab to copy the keys and paste them into the file by replacing the placeholder texts.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-10.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"564\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-10.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-10.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-10.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cpre>\u003Ccode>\u002F\u002F localazy.keys.json\n{\n    \"writeKey\": \"&lt;your-apps-write-key&gt;\", \n    \"readKey\": \"&lt;your-apps-read-key&gt;\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Add the \u003Ccode>localazy.keys.json\u003C\u002Fcode> to the \u003Ccode>.gitignore\u003C\u002Fcode> file to prevent it from being tracked by git and pushed to the remote repository.\u003C\u002Fp>\u003Cp>The reason for keeping our authorization keys separate in \u003Ccode>localazy.keys.json\u003C\u002Fcode> from other Localazy configurations in \u003Ccode>localazy.json\u003C\u002Fcode> is so that we can push the configuration file to our repository without exposing our authorization keys.\u003C\u002Fp>\u003Ch3 id=\"add-localazy-configuration-script\">Add Localazy configuration script \u003Ca class=\"markdownit-header-anchor\" href=\"#add-localazy-configuration-script\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>In the project root folder, create a configuration script called \u003Ccode>localazy.json\u003C\u002Fcode> which tells the CLI what files to upload and how to process the downloaded translations. There are a lot of configurations that can be done, and you can have an in-depth read of them \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">here\u003C\u002Fa>. It’s also good to note some of the features also depend on the pricing tier being used. For example, format conversions are not available in the free tier.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F localazy.json\n{\n    \"upload\": {\n      \"type\": \"json\",\n      \"files\": \"src\u002Fassets\u002Flocales\u002Fen.json\"\n    },\n    \"download\": {\n      \"files\": \"src\u002Fassets\u002Flocales\u002F${lang}.json\"\n    }  \n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Breakdown of the code snippet above and what it does:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>upload:\u003C\u002Fstrong> object specifies the type of files to be uploaded and the path of the files.\u003C\u002Fli>\u003Cli>\u003Cstrong>download:\u003C\u002Fstrong> object describes how to process translated files and where to store them in the directory.\u003C\u002Fli>\u003Cli>\u003Cstrong>${lang}:\u003C\u002Fstrong> is a variable used to specify the language translated to using the language code such as es, de, fr, and more.\u003C\u002Fli>\u003C\u002Ful>\u003Ch3 id=\"add-localazy-commands-to-packagejson\">Add Localazy commands to package.json \u003Ca class=\"markdownit-header-anchor\" href=\"#add-localazy-commands-to-packagejson\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>To enable working with others on the project, we will add the localazy download and upload commands in the \u003Ccode>package.json\u003C\u002Fcode> script commands to make it easily accessible.\u003C\u002Fp>\u003Cp>The \u003Ccode>localazy:download-remote\u003C\u002Fcode> script will be used to download files on remote repositories. Remember, we are not pushing the \u003Ccode>localazy.keys.json\u003C\u002Fcode> to the remote repository, so the remote repository needs a way to get the authorization keys. This script enables us to access the write and read keys from the environment variables and also use the release tag feature for various environments. Locally, we will use the `latest` version, which is the default, so it does not need to be specified.\u003C\u002Fp>\u003Cp>The \u003Ccode>localazy:publish\u003C\u002Fcode> script will be run to publish or promote tags from a source tag to a target tag. It also uses the write and read keys from the environment variables. It also includes the \u003Ccode>LOCALAZY_FROM_RELEASE_TAG\u003C\u002Fcode> as the source tag and \u003Ccode>LOCALAZY_RELEASE_TAG\u003C\u002Fcode> as the target tag. This enables us to publish the release tag: latest to staging for previews and staging to production for the production site.\u003C\u002Fp>\u003Cp>The \u003Ccode>build\u003C\u002Fcode> script is modified to run the \u003Ccode>localazy:publish\u003C\u002Fcode> and \u003Ccode>localazy:download-remote\u003C\u002Fcode> scripts before the build.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F package.json\n\n\"scripts\": {\n    \u002F\u002F ... other commands\n    \"localazy:upload\": \"localazy upload\",\n    \"localazy:download\": \"localazy download\",\n    \"localazy:download-remote\": \"localazy download -r $LOCALAZY_READ_KEY -w $LOCALAZY_WRITE_KEY -t $LOCALAZY_RELEASE_TAG\",\n    \"localazy:publish\": \"localazy tag -r $LOCALAZY_READ_KEY -w $LOCALAZY_WRITE_KEY promote $LOCALAZY_FROM_RELEASE_TAG  $LOCALAZY_RELEASE_TAG\",\n    \"build\": \"npm run localazy:publish &amp;&amp; npm run localazy:download-remote &amp;&amp; react-scripts build\",\n    \u002F\u002F ... other commands\n },\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Note: Do not remove other commands in the scripts property\u003C\u002Fstrong>\u003C\u002Fp>\u003Ch3 id=\"upload-files-to-localazy\">Upload files to Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#upload-files-to-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Run the command to upload files to the Localazy project.\u003C\u002Fp>\u003Cpre>\u003Ccode>npm run localazy:upload\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"add-languages\">Add languages \u003Ca class=\"markdownit-header-anchor\" href=\"#add-languages\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>Add the languages to be translated to on the Localazy dashboard. I added Czech, Finnish, and Spanish Languages. \u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-11.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"834\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-11.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-11.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-11.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"set-up-automatic-upload\">Set up automatic upload \u003Ca class=\"markdownit-header-anchor\" href=\"#set-up-automatic-upload\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>To enable automatic upload when a commit is made, we will use \u003Ca href=\"https:\u002F\u002Ftypicode.github.io\u002Fhusky\u002F#\u002F\">husky\u003C\u002Fa>.\u003C\u002Fp>\u003Cpre>\u003Ccode>npx husky-init &amp;&amp; npm install\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command sets up husky, modifies the \u003Ccode>package.json\u003C\u002Fcode>, and creates a sample pre-commit hook that can be edited. The default command in the pre-commit hook is \u003Ccode>npm test\u003C\u002Fcode> which will run once a commit is made.\u003C\u002Fp>\u003Cp>To change the pre-commit command, navigate to the \u003Ccode>.husky\u002Fpre-commit\u003C\u002Fcode> file and change the \u003Ccode>npm test\u003C\u002Fcode> to \u003Ccode>npm run upload\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch2 id=\"push-code-to-a-remote-git-repository\">📇 Push code to a remote git repository \u003Ca class=\"markdownit-header-anchor\" href=\"#push-code-to-a-remote-git-repository\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>This is when we push our code to a remote git repository such as Github, Bitbucket, Gitlab, etc. Create a new repository on any of these platforms and follow the steps listed. You can add new strings to your source file and commit. Then, confirm on the Localazy dashboard that the changes were uploaded to Localazy based on \u003Ca href=\"https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1QEyKpNXzuCBt1UmbVsMiY5OeP1eTGg0ZDBN2ZikDrvc\u002Fedit#heading=h.groef9827tqo\">Step 7: Set up Automatic Upload\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>If you have any issues while trying to commit the changes, ensure Localazy authorization keys are set up in the \u003Ccode>localazy.keys.json\u003C\u002Fcode> file and try again.\u003C\u002Fp>\u003Ch2 id=\"integrating-vercel-builds\">🕹️ Integrating Vercel builds \u003Ca class=\"markdownit-header-anchor\" href=\"#integrating-vercel-builds\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>There are two major ways of deploying on Vercel:\u003C\u002Fp>\u003Cul>\u003Cli>Importing a git repository\u003C\u002Fli>\u003Cli>Using a custom CI\u002FCD workflow with Vercel\u003C\u002Fli>\u003C\u002Ful>\u003Cp>When you import a git repository, Vercel clones your code, then builds and deploys your application. This method requires zero integrations and is ready to use.\u003C\u002Fp>\u003Cp>Using a custom CI\u002FCD workflow with Vercel CLI, you need to write a deployment script. This is ideal when you do not want Vercel to clone your code and also want to perform other CI operations. Also, you can add and commit the downloaded files to the code repository.\u003C\u002Fp>\u003Ch3 id=\"importing-git-repository\">Importing git repository \u003Ca class=\"markdownit-header-anchor\" href=\"#importing-git-repository\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Cp>The easiest way to integrate with Vercel is by importing a git project repository.\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fsignup\">Sign up\u003C\u002Fa> if you do not have a Vercel account or \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Flogin\">log in\u003C\u002Fa> if you have one. You can easily create an account by connecting to your Git provider.\u003C\u002Fp>\u003Ch4 id=\"import-project-on-vercel\">Import project on Vercel\u003C\u002Fh4>\u003Cp>Add a new project by importing a repository from your git provider. Go to the environment variables section and add the authorization and release tag keys with their values:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-12.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"970\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-12.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-12.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-12.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>We will later update the environment variables release tag variable to use the right one. Deploy application.\u003C\u002Fp>\u003Ch4 id=\"update-the-release-tag-for-different-environments\">Update the release tag for different environments\u003C\u002Fh4>\u003Cp>Navigate to the settings within the project dashboard. Go to environment variables in the sidebar.\u003C\u002Fp>\u003Cp>On this page, scroll to the \u003Ccode>LOCALAZY_RELEASE_TAG\u003C\u002Fcode> variable and edit it. Uncheck the production and preview checkboxes and save changes.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-13.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"882\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-13.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-13.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-13.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Add new environment variables for staging (preview) and production environments release tags as shown below. Save and repeat for all.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-14.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"700\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-14.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-14.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-14.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The list of environment variables should look like this:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-15.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"953\" height=\"652\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-15.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-15.png 953w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"using-a-custom-cicd-workflow-with-vercel-cli\">Using a custom CI\u002FCD workflow with Vercel CLI \u003Ca class=\"markdownit-header-anchor\" href=\"#using-a-custom-cicd-workflow-with-vercel-cli\">🔗\u003C\u002Fa>\u003C\u002Fh3>\u003Ch4 id=\"create-vercel-deployment-script-files\">Create Vercel deployment script files\u003C\u002Fh4>\u003Cp>In the local repository, create the Vercel deployment scripts based on the CI\u002FCD workflow to be used. The way to structure deployment files for different workflows differs. Read about \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-can-i-use-github-actions-with-vercel\">GitHub Actions\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-can-i-use-bitbucket-pipelines-with-vercel\">Bitbucket pipelines\u003C\u002Fa>, and \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-can-i-use-gitlab-pipelines-with-vercel\">GitLab pipeline\u003C\u002Fa> integrations with Vercel using the links.\u003C\u002Fp>\u003Cp>Then, add a job to set up Localazy before the Vercel job. The steps involve installing Localazy CLI, publishing release tags, and downloading translated files. Also, ensure the Vercel job depends on the Localazy job to ensure files are downloaded before the Vercel build.\u003C\u002Fp>\u003Cp>The \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Factions\u002Fcheckout\">\u003Ccode>actions\u002Fcheckout@v3\u003C\u002Fcode>\u003C\u002Fa> configures a \u003Ccode>token\u003C\u002Fcode> for HTTP that enables scripts to run authenticated git commands. This will enable the downloaded commit to be pushed to the code repository. If you used SSH to set up the repository, you will configure a \u003Ccode>ssh-key\u003C\u002Fcode> instead.\u003C\u002Fp>\u003Cp>To ensure the downloaded files are added to our code repository, the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fgit-auto-commit\">git-auto-commit\u003C\u002Fa> action was used. To prevent the automatic upload created \u003Ca href=\"https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1QEyKpNXzuCBt1UmbVsMiY5OeP1eTGg0ZDBN2ZikDrvc\u002Fedit#heading=h.groef9827tqo\">here\u003C\u002Fa>, the \u003Ccode>commit_options: '--no-verify'\u003C\u002Fcode> was added to prevent the pre-commit hook from running as we do not want to upload translations. For the Localazy download guide, use these articles for \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fautomated-localization-github-actions-localazy\">GitHub Actions\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fautomated-localization-gitlab-cicd-localazy\">GitLab pipelines\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>YAML file format is commonly used to write deployment configuration files, similar to JSON and XML. If you are new to working with a YAML file, it is important to note that indentation matters. You could also check this \u003Ca href=\"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fwhat-is-yaml-the-yml-file-format\u002F\">article\u003C\u002Fa> for a quick brush through.\u003C\u002Fp>\u003Cp>For GitHub actions, this is how the production deployment file looks after setting up all the steps.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F .github\u002Fworkflows\u002Fproduction-deployment.yaml\n\nname: Vercel Production Deployment\nenv:\n  VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}\n  VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}\n  LOCALAZY_FROM_RELEASE_TAG: ${{ secrets.LOCALAZY_STAGING_RELEASE_TAG }}\n  LOCALAZY_RELEASE_TAG: ${{ secrets.LOCALAZY_PROD_RELEASE_TAG }}\n  LOCALAZY_READ_KEY: ${{ secrets.LOCALAZY_READ_KEY }}\n  LOCALAZY_WRITE_KEY: ${{ secrets.LOCALAZY_WRITE_KEY }}\non:\n  push:\n    branches:\n      - master\njobs:\n  Localazy-download:\n    name: Download strings from Localazy\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v3\n        with:\n          fetch-depth: '0'\n          token: ${{ secrets.TOKEN }}\n      - name: Install localazy\u002Fcli and other dependencies\n        run: npm install\n      - name: Publish production release tag\n        run: npm run localazy:publish\n      - name: Download translated files\n        uses: localazy\u002Fdownload@v1\n        with:\n          read_key: ${{ secrets.LOCALAZY_READ_KEY }}\n          write_key: ${{ secrets.LOCALAZY_WRITE_KEY }}\n          release_tag: ${{ secrets.LOCALAZY_PROD_RELEASE_TAG }}\n          \n      - run: |\n          # Test that localized files were downloaded by listing \n          # the content of locales folder.\n          ls src\u002Fassets\u002Flocales\u002F*.json\n      - name: Commit translation changes to repository\n        uses: stefanzweifel\u002Fgit-auto-commit-action@v4\n        with:\n          commit_message: Commit latest translations from Localazy.\n          commit_options: '--no-verify'\n          branch: master\n\n  Deploy-Production:\n    name: Deploy previews on vercel\n    needs: Localazy-download\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v3\n      - name: Install Vercel CLI\n        run: npm install --global vercel@latest\n      - name: Pull Vercel Environment Information\n        run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}\n      - name: Build Project Artifacts\n        run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}\n      - name: Deploy Project Artifacts to Vercel\n      \trun: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The preview deployment is also similar. I used the master branch as my production branch because that is my default branch. Yours might be different like \u003Ccode>main\u003C\u002Fcode> or something else. Ensure you use the right branch name.\u003C\u002Fp>\u003Cp>Add the necessary environment variables. The Localazy variables are used by the localazy publish release tag. I used the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Flocalazy-download\">localazy download action\u003C\u002Fa> available in the GitHub marketplace. If you do not have one in your CI\u002FCD marketplace, you could just use the \u003Ccode>npm run localazy:download-remote\u003C\u002Fcode> command and it will use the env variables declared above.\u003C\u002Fp>\u003Ch4 id=\"update-packagejson-file\">Update package.json file\u003C\u002Fh4>\u003Cp>Update the build script back to\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F package.json\n\n\"scripts\": {\n    \u002F\u002F ... other commands\n    \"build\": \"react-scripts build\",\n    \u002F\u002F ... other commands\n },\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch4 id=\"add-secrets-to-the-repository\">Add secrets to the repository\u003C\u002Fh4>\u003Cp>Get the secret values and add Localazy and Vercel secrets to the repository that will run the workflow. I added mine to GitHub and followed these steps.\u003C\u002Fp>\u003Cul>\u003Cli>Retrieve your \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-do-i-use-a-vercel-api-access-token\">Vercel Access Token\u003C\u002Fa> from your Vercel dashboard.\u003C\u002Fli>\u003Cli>Then, install the \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcli\">Vercel CLI\u003C\u002Fa> locally using \u003Ccode>npm i -g vercel\u003C\u002Fcode> and run \u003Ccode>vercel login\u003C\u002Fcode>.\u003C\u002Fli>\u003Cli>Inside the project folder, run \u003Ccode>vercel link\u003C\u002Fcode> to create a new Vercel project.\u003C\u002Fli>\u003Cli>Get the Vercel \u003Ccode>projectId\u003C\u002Fcode> and \u003Ccode>orgId\u003C\u002Fcode>  from the generated .vercelfolder. It is in the project.json file.\u003C\u002Fli>\u003Cli>Create a \u003Ca href=\"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fkeeping-your-account-and-data-secure\u002Fcreating-a-personal-access-token\">personal access token\u003C\u002Fa> that will be used to authenticate git commands, which is used as TOKEN in the YAML file.\u003C\u002Fli>\u003Cli>In GitHub or your CI platform, go to the repository secrets, under settings, and add VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID, and other Localazy variables used in the deployment file.\u003C\u002Fli>\u003C\u002Ful>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-16.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1566\" height=\"1290\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-16.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-16.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-16.png 1566w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch4 id=\"push-updates-to-the-repository\">Push updates to the repository\u003C\u002Fh4>\u003Cp>You can create a new repository or use the existing one. On push to the repository, the workflow action runs, and the code is deployed. If the actions fail, it might be due to not setting up the secrets needed in the YAML file. Confirm everything is well set up and rerun workflow.\u003C\u002Fp>\u003Cp>You will notice the commit generated when files are downloaded triggers the workflow again. To fix this, adding the [skip-ci] to the end of the commit message can stop the build from running in \u003Ca href=\"https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fmanaging-workflow-runs\u002Fskipping-workflow-runs\">GitHub\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fsupport.atlassian.com\u002Fbitbucket-cloud\u002Fdocs\u002Fpush-back-to-your-repository\u002F\">BitBucket\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fsupport.atlassian.com\u002Fbitbucket-cloud\u002Fdocs\u002Fpush-back-to-your-repository\u002F\">GitLab\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.travis-ci.com\u002Fuser\u002Fcustomizing-the-build\u002F#skipping-a-build\">Travis CI\u003C\u002Fa>, etc. Push changes and confirm the workflow runs once for each push.\u003C\u002Fp>\u003Ch2 id=\"view-the-deployed-application\">❤️ View the deployed application \u003Ca class=\"markdownit-header-anchor\" href=\"#view-the-deployed-application\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>View the application by clicking the Visit button or any of the domain links in the deployment tab of the project dashboard. Notice on switching languages, the strings are not translated yet and use the fallback language.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-17.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"884\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-17.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-17.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-17.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"translate-uploaded-strings-on-localazy\">📗 Translate uploaded strings on Localazy \u003Ca class=\"markdownit-header-anchor\" href=\"#translate-uploaded-strings-on-localazy\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>There are several ways to translate with Localazy ranging from ordering \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fcontinuous-localization-team\">continuous translations\u003C\u002Fa> such as professional translations and proofreading to using human-assisted \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fadditional-mt-engines\">machine translations\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm\">community translations\u003C\u002Fa> (ShareTM). \u003C\u002Fp>\u003Cp>We will be using the ShareTM translations and the Amazon Machine translations available in the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftiers\u002Ffree\">Free tier.\u003C\u002Fa>\u003C\u002Fp>\u003Cp>Navigate to the languages on the dashboard and select a language option by clicking the icon on the right. Click on \u003Cstrong>Start translating\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-18.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"884\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-18.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-18.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-18.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Select a translation from the suggestions by clicking the \u003Cstrong>USE THIS\u003C\u002Fstrong> button and save the translation. Repeat this step for all the strings and all languages.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-19.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"886\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-19.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-19.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-19.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"redeploy-the-application-on-vercel\">🔄 Redeploy the application on Vercel \u003Ca class=\"markdownit-header-anchor\" href=\"#redeploy-the-application-on-vercel\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>Checkout to a new branch, make some updates and push. Create a pull request against the production branch. Check the preview link to confirm the translations were published and downloaded. Compare it with the production site, and you will notice the production site does not have the translation changes or updates yet.\u003C\u002Fp>\u003Cp>Merge the branch to the production \u003Ccode>master\u003C\u002Fcode> branch and confirm the translations work as expected by checking the live site. If you used the CI\u002FCD workflow, also check the \u003Ccode>src\u002Fassets\u002Flocales\u003C\u002Fcode> folder, and you will see the downloaded files.\u003C\u002Fp>\u003Cp>Also, if changes are not made to the repository and some translations were made, we can just redeploy the application on Vercel or rerun the CI\u002FCD workflow, and the changes get published.\u003C\u002Fp>\u003Cp>You can see my deployed application \u003Ca href=\"https:\u002F\u002Flocalazy-vercel-integration.vercel.app\u002F\">here\u003C\u002Fa>.\u003C\u002Fp>\u003Ch2 id=\"conclusion\">✔️ Conclusion \u003Ca class=\"markdownit-header-anchor\" href=\"#conclusion\">🔗\u003C\u002Fa>\u003C\u002Fh2>\u003Cp>We have successfully set up a workflow that enables us to integrate Localazy with Vercel builds by either importing a git repository or using a custom CI\u002FCD workflow. If you have not been integrating your localized application with Vercel, I hope you consider this for its benefits and easy integration.\u003C\u002Fp>\u003Cp>The integration gives room for different teams and projects to customize when they want to run their builds to suit their needs. Also, teams should put a structure in place to ensure files are translated before the build runs and translation works as expected before merging pull requests to avoid issues. Another way will be to rerun the builds whenever the translations are done.\u003C\u002Fp>\u003Cp>View the Localazy-Vercel integrations using the import git repository \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMoyinoluwaA\u002FLocalazy-Vercel-Integration\">here\u003C\u002Fa> and using the GitHub Actions \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMoyinoluwaA\u002FLocalazy-Vercel-ci-Integration\">here\u003C\u002Fa>.\u003C\u002Fp>",{"id":1139,"status":6,"created_on":1954,"modified_on":1955,"icon":1956,"header":1957,"description":1958,"button_label":1959,"link":1960},"2022-03-17T12:23:03.000Z","2023-01-19T11:50:20.000Z","member","Enjoy localization on autopilot! 🚀","Grab the Autopilot plan and let Localazy translate your projects while you sleep. Automatically.","Take off","register",{"slug":1865,"id":1858,"uuid":1962,"title":1864,"html":1963,"comment_id":1858,"feature_image":1867,"featured":16,"visibility":1964,"email_recipient_filter":1965,"created_at":1966,"updated_at":1866,"published_at":1866,"custom_excerpt":1951,"codeinjection_head":13,"codeinjection_foot":13,"custom_template":13,"canonical_url":13,"authors":1967,"tags":1973,"primary_author":2044,"primary_tag":2045,"url":2046,"excerpt":1951,"reading_time":1139,"access":16,"send_email_when_published":14,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"email_subject":13,"frontmatter":13,"dictionary":1877,"cta":1953,"plainTags":1868},"2a4ddb3a-a96c-4bc1-b0ae-507c6f47b14a","\u003Cp>Localization has made it easy to create applications for users in different geographic regions by ensuring that users can access them in the language they understand. \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\">Localazy\u003C\u002Fa> simplifies and automates the language translation process, making it effortless to implement localization. This reduces manual errors, which could occur when moving files or copying and pasting translated strings.\u003C\u002Fp>\u003Ch4 id=\"what-is-vercel\">What is Vercel?\u003C\u002Fh4>\u003Cp>\u003Ca href=\"https:\u002F\u002Fvercel.com\u002F\">Vercel\u003C\u002Fa> is a deployment platform for front-end projects. It provides support for deployments of various frontend \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fframeworks#list-of-supported-frameworks\">frameworks\u003C\u002Fa>. The main features offered include branch previews with automatic builds and deployment for projects. Integrating Localazy into Vercel builds can be done for new and existing projects.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card kg-card-hascaption\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-35.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1920\" height=\"969\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-35.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-35.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1600\u002F2023\u002F07\u002Fimage-35.png 1600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-35.png 1920w\" sizes=\"(min-width: 720px) 720px\">\u003Cfigcaption>\u003Ca href=\"https:\u002F\u002Fvercel.com\u002F\">Vercel.com Homepage\u003C\u002Fa>\u003C\u002Ffigcaption>\u003C\u002Ffigure>\u003Ch2 id=\"%F0%9F%93%8C-benefits-of-integrating-localized-applications-with-vercel-build\">📌 Benefits of integrating localized applications with Vercel build\u003C\u002Fh2>\u003Cp>There are several benefits to using Localazy with Vercel:\u003C\u002Fp>\u003Cul>\u003Cli>Easier management of downloading translations as they do not have to be downloaded locally in the code base. A rerun of the deployment would trigger the translation downloads.\u003C\u002Fli>\u003Cli>Faster deployment and shipping of applications. 🌠\u003C\u002Fli>\u003Cli>Use of preview branches with Localazy release tags for QA inspections before merging PR into release branches.\u003C\u002Fli>\u003Cli>It speeds up the development process as developers can focus on building applications while using an automated process for managing translations and deployments. 🔥\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"%F0%9F%8F%97%EF%B8%8F-sample-application\">🏗️ Sample Application\u003C\u002Fh2>\u003Cp>In this tutorial, we will create an application that translates Idioms from English to other languages such as Spanish, Czech, and Finnish. We will upload our strings to Localazy whenever a commit is made using the \u003Ca href=\"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgithooks#_pre_commit\">git pre-commit hook\u003C\u002Fa> and download the translated strings before building on Vercel. Release tags for staging and production will be used to manage translations in different environments.\u003C\u002Fp>\u003Cblockquote>Tip: If you have an existing localized project you would like to use, skip to the next section. You will be integrating your existing project and will not end up with the sample application we will create in this tutorial.\u003C\u002Fblockquote>\u003Ch2 id=\"%F0%9F%8F%81-getting-started\">🏁 Getting started\u003C\u002Fh2>\u003Cp>For a smooth ride during this tutorial, it is important to have a basic understanding of git commands and how to set up a git repository, e.g., \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftags\u002Fgithub\">GitHub\u003C\u002Fa>, Bitbucket, GitLab, etc. Experience writing deployment scripts is nice to have as it will come in handy, but you can follow along well without it, as the tutorial simplifies the concepts.\u003C\u002Fp>\u003Ch3 id=\"set-up-the-localized-application\">Set up the Localized application\u003C\u002Fh3>\u003Cp>For new projects, the first step is to create an application. I will use a React application but feel free to use your preferred framework or library. The localization steps will differ based on the framework being used.\u003C\u002Fp>\u003Cp>If you are not using React, check these links and follow just the steps needed to create and set up your sample localized project:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-localize-vuejs-app-with-vue-i18n-and-localazy\">Vue.js\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Flocalize-angular-app-i18n-l10n-localazy\">Angular\u003C\u002Fa>\u003C\u002Fli>\u003Cli>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-localize-nuxt-v3-using-localazy\">Nuxt.js\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>When done setting up the localized project, continue reading here. Some of the steps might have been done already, and you might just need to modify others.\u003C\u002Fp>\u003Cp>If you are going to use React with me, let’s go right into it.\u003C\u002Fp>\u003Ch3 id=\"create-application\">Create application\u003C\u002Fh3>\u003Cp>Create a new project named \u003Ccode>localazy-vercel-integration\u003C\u002Fcode> using the command:\u003C\u002Fp>\u003Cpre>\u003Ccode>npx create-react-app localazy-vercel-integration\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"install-i18n-packages\">Install i18n packages\u003C\u002Fh3>\u003Cp>To allow for the localization of our application, we need to use the internationalization framework for React. Install it by running the command:\u003C\u002Fp>\u003Cpre>\u003Ccode>npm install react-i18next i18next\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"set-up-source-strings-to-be-used-in-the-application\">Set up source strings to be used in the application\u003C\u002Fh3>\u003Cp>Create a file called \u003Ccode>en.json\u003C\u002Fcode> with a file path of  \u003Ccode>assets\u002Flocales\u002Fen.json\u003C\u002Fcode> in the \u003Ccode>src\u003C\u002Fcode> directory. Store the source strings to be used in the application here.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F src\u002Fassets\u002Flocales\u002Fen.json\n\n{\n    \"heading\": \"Translating idioms from English to {{lang}}\",\n    \"idioms\": [\n        \"a friend in need is a friend indeed\",\n        \"cast pearls before swine\",\n        \"curiosity killed the cat\",\n        \"don't judge a book by its cover\",\n        \"early bird catches the worm\",\n        \"fall on deaf ears\",\n        \"hit the nail on the head\",\n        \"it's raining cats and dogs\",\n        \"jump to conclusions\",\n        \"kill two birds with one stone\"\n    ],\n    \"english\": \"English\",\n    \"translate_to\": \"Translate to\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"set-up-the-application-to-use-localized-strings\">Set up the application to use Localized strings\u003C\u002Fh3>\u003Cp>To set it up, create \u003Ccode>i18n.js\u003C\u002Fcode>  in the src directory and paste the code below.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F src\u002Fi18n.js\n\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nconst resources = {\n  en: {\n    translation: require('.\u002Fassets\u002Flocales\u002Fen.json')\n  },\n  cs: {\n    translation: require('.\u002Fassets\u002Flocales\u002Fcs.json')\n  },\n  es: {\n    translation: require('.\u002Fassets\u002Flocales\u002Fes.json')\n  },\n  fi: {\n    translation: require('.\u002Fassets\u002Flocales\u002Ffi.json')\n  }\n}\n\ni18n\n  .use(initReactI18next)\n  .init({\n    resources,\n    lng: \"en\",\n    fallbackLng: \"en\"\n});\n\n\nexport default i18n;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Breakdown of the properties used in the code snippet above and what it does:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>resources:\u003C\u002Fstrong> is used to access and store all the localized files. The strings are imported from the locales folder. The resources contain the different languages the application will use, both the source file and the files that the source strings will be translated to.\u003C\u002Fli>\u003Cli>\u003Cstrong>lng:\u003C\u002Fstrong> is the default language to be used in the application. It is set to use English.\u003C\u002Fli>\u003Cli>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwww.i18next.com\u002Fprinciples\u002Ffallback#language-fallback\">fallbackLng\u003C\u002Fa>:\u003C\u002Fstrong> is the language to be used when a translation does not exist in the selected locale or no language is chosen. It is set to use English.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Other configuration options can be found \u003Ca href=\"https:\u002F\u002Fwww.i18next.com\u002Foverview\u002Fconfiguration-options\">here\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>If you are running your application locally, you are likely to have an error at this stage. This is because the translation JSON files do not exist yet until they are downloaded from Localazy.\u003C\u002Fp>\u003Cp>Create the JSON files and add an empty object to them to fix the error. The folder directory should look like this:\u003Cbr>\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-3.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"466\" height=\"290\">\u003C\u002Ffigure>\u003Cp>In the \u003Ccode>index.js\u003C\u002Fcode> file where the application is rendered, import the \u003Ccode>i18n\u003C\u002Fcode> file created, which makes the locale languages available across the whole application.\u003C\u002Fp>\u003Cpre>\u003Ccode> \u002F\u002F src\u002Findex.js\n\nimport React from 'react';\nimport ReactDOM from 'react-dom\u002Fclient';\nimport '.\u002Findex.css';\nimport \".\u002Fi18n\"\nimport App from '.\u002FApp';\nimport reportWebVitals from '.\u002FreportWebVitals';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  &lt;React.StrictMode&gt;\n    &lt;App \u002F&gt;\n  &lt;\u002FReact.StrictMode&gt;\n);\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"use-localized-strings-in-the-application\">Use Localized strings in the application\u003C\u002Fh3>\u003Cp>Modify the \u003Ccode>App.js\u003C\u002Fcode> file to use the localized strings. This creates a simple table layout with English words and their translations to Czech, Finnish, or Spanish.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F src\u002FApp.js\n\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport '.\u002FApp.css';\n\nfunction App() {\n  const { t, i18n } = useTranslation();\n\n  \u002F\u002F create state to manage language to be translated to\n  const [language, setLanguage] = useState(\"cs\");\n\n  const changeLanguage = (e) =&gt; {\n    i18n.changeLanguage(e.target.value);\n  };\n  \n  let idioms = t('idioms', { returnObjects: true });\n\n  const getLanguage = (lang) =&gt; {\n    let fullLanguage;\n\n    switch (lang) {\n      case \"cs\":\n        fullLanguage = \"Czech\";\n        break;\n      case \"fi\":\n        fullLanguage = \"Finnish\";\n        break;\n      case \"es\":\n        fullLanguage = \"Spanish\";\n        break;\n      default:\n        fullLanguage = \"Czech\";\n    }\n\n    return fullLanguage;\n  }\n\n  return (\n    &lt;div className=\"App\"&gt;\n      &lt;h1&gt;{t('heading', { lang: getLanguage(language), lng: \"en\"})}&lt;\u002Fh1&gt;\n      &lt;div&gt;\n        {t('translate_to', lng: \"en\")}\n        &lt;select onChange={changeLanguage} value={language}&gt;\n          &lt;option value=\"cs\"&gt;Czech&lt;\u002Foption&gt;\n          &lt;option value=\"fi\"&gt;Finnish&lt;\u002Foption&gt;\n          &lt;option value=\"es\"&gt;Spanish&lt;\u002Foption&gt;\n        &lt;\u002Fselect&gt;\n      &lt;\u002Fdiv&gt;\n      &lt;table&gt;\n        &lt;thead&gt;\n          &lt;tr&gt;\n            &lt;th&gt;S\u002FN&lt;\u002Fth&gt;\n            &lt;th&gt;{t('english')}&lt;\u002Fth&gt;\n            &lt;th&gt;{getLanguage(language)}&lt;\u002Fth&gt;\n          &lt;\u002Ftr&gt;\n        &lt;\u002Fthead&gt;\n        &lt;tbody&gt;\n          {\n            t('idioms', { returnObjects: true, lng: \"en\" }).map((idiom, index) =&gt; \n              &lt;tr key={index}&gt;\n                &lt;td&gt;{index + 1}&lt;\u002Ftd&gt;\n                &lt;td&gt;{idiom}&lt;\u002Ftd&gt;\n                &lt;td&gt;{idioms[index]}&lt;\u002Ftd&gt;\n              &lt;\u002Ftr&gt;\n            )\n          }\n        &lt;\u002Ftbody&gt;\n      &lt;\u002Ftable&gt;\n    &lt;\u002Fdiv&gt;\n  );\n}\n\nexport default App;\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>In the code above,\u003C\u002Fp>\u003Cul>\u003Cli>the default language to be translated to is set to Czech, but as the file is yet to be uploaded, translated, and downloaded, the fallback language English will be used.\u003C\u002Fli>\u003Cli>the string \u003Ccode>heading\u003C\u002Fcode>, \u003Ccode>translate_to\u003C\u002Fcode>, and the first column of the table are set to always use English as the \u003Ccode>lng\u003C\u002Fcode> option is set to \u003Ccode>en\u003C\u002Fcode>. If you do not want this behavior, remove the \u003Ccode>lng\u003C\u002Fcode> option passed.\u003C\u002Fli>\u003Cli>the \u003Ccode>useEffect\u003C\u002Fcode> hook runs when the language is updated to ensure the i18n changeLanguage method is called.\u003C\u002Fli>\u003Cli>the \u003Ccode>getLanguage\u003C\u002Fcode> function is used to generate the language from the language code, e.g., Czech from \u003Ccode>cs\u003C\u002Fcode>.\u003C\u002Fli>\u003Cli>the \u003Ccode>select onChange\u003C\u002Fcode> event updates the language state, which triggers the \u003Ccode>useEffect\u003C\u002Fcode> hook.\u003C\u002Fli>\u003C\u002Ful>\u003Ch3 id=\"view-application\">View application\u003C\u002Fh3>\u003Cp>View the current state of the application by running the following:\u003C\u002Fp>\u003Cpre>\u003Ccode>npm start\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Confirm the localized strings are used.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-4.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"884\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-4.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-4.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-4.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The custom CSS styling used can be found \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMoyinoluwaA\u002FLocalazy-Vercel-Integration\u002Fblob\u002Fmaster\u002Fsrc\u002FApp.css\">here\u003C\u002Fa>.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%9A%A9-set-up-localazy\">🚩 Set up Localazy\u003C\u002Fh2>\u003Cp>Now we are getting to the main goal of our tutorial.\u003C\u002Fp>\u003Ch3 id=\"create-a-project-on-localazy\">Create a project on Localazy\u003C\u002Fh3>\u003Cp>Log in or create a \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002F\">Localazy\u003C\u002Fa> account if you do not have one.\u003C\u002Fp>\u003Cblockquote>Tip: You can learn \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fgetting-started-with-localazy\">how to get started with Localazy\u003C\u002Fa> in the documentation.\u003C\u002Fblockquote>\u003Cp>Create a new project.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-5.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"716\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-5.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-5.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-5.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Enter a project name of choice. I named the project \u003Cem>translate-idioms-from-english,\u003C\u002Fem> but you can decide to use a different name. \u003C\u002Fp>\u003Cblockquote>By the way: You can help us properly translate various idioms into your language in the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fp\u002Ftranslate-idioms\">'Translate Idioms'\u003C\u002Fa> community project, \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fhow-to-translate-idioms-the-right-way\">learn more on the blog\u003C\u002Fa>.\u003C\u002Fblockquote>\u003Cp>The source language is set to English, as the strings to be uploaded will be in English. Change the source language if you will be using a different language. Then, click the create new project button.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-6.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"1166\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-6.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-6.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-6.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"publish-release-tags-optional\">Publish release tags (optional)\u003C\u002Fh3>\u003Cp>\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Frelease-tags\">Release tags\u003C\u002Fa> are used to maintain multiple existing \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Freleases\">releases\u003C\u002Fa> which are used in different environments to ensure that each environment has only the translations needed. This prevents unwanted changes from getting to the live environment and allows us to decide when we want to publish new changes.\u003C\u002Fp>\u003Cp>By default, the latest tag is used for all uploads and downloads when a tag is not specified.\u003C\u002Fp>\u003Cblockquote>⚠️ Currently, Releases are available in the\u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftiers\u002Fprofessional\"> Professional tier\u003C\u002Fa> and higher. If you are on the free tier, you will need to upgrade your account plan to use this feature.\u003C\u002Fblockquote>\u003Cp>Navigate to the releases section on the project dashboard:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-7.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1146\" height=\"904\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-7.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-7.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-7.png 1146w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Click on the \u003Cstrong>Add new release\u003C\u002Fstrong> button or the ‘+’ icon to create a new release tag. Input a release tag name and publish the release.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-8.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"707\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-8.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-8.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-8.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>I published staging and production release tags.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-9.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"464\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-9.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-9.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-9.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Now, we will go back to our application code.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%91%A8%E2%80%8D%F0%9F%92%BB-integrate-localazy-using-the-cli\">👨‍💻 Integrate Localazy using the CLI\u003C\u002Fh2>\u003Ch3 id=\"install-localazy-cli\">Install Localazy CLI\u003C\u002Fh3>\u003Cp>Install the\u003Cem> \u003C\u002Fem>\u003Cstrong>Localazy \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">CLI\u003C\u002Fa>\u003C\u002Fstrong>\u003Cem> \u003C\u002Fem>locally\u003Cem> \u003C\u002Fem>as a dev dependency\u003Cem> \u003C\u002Fem>using the npm package to enable anyone that runs the code to install it when running the \u003Ccode>npm install\u003C\u002Fcode> command. Use the command\u003C\u002Fp>\u003Cpre>\u003Ccode>npm i --save-dev @localazy\u002Fcli\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"create-a-localazykeysjson-file\">Create a localazy.keys.json file\u003C\u002Fh3>\u003Cp>We will store our write and read keys in this file to keep it secure. In the root folder, create a \u003Ccode>localazy.keys.json\u003C\u002Fcode> to store the authorization keys needed for the Localazy CLI using the format shown below. The \u003Cstrong>writeKey \u003C\u002Fstrong>and\u003Cstrong> readKey\u003C\u002Fstrong> are used to authorize the request.\u003C\u002Fp>\u003Cp>Navigate to the Localazy project directory and the settings tab to copy the keys and paste them into the file by replacing the placeholder texts.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-10.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"564\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-10.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-10.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-10.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cpre>\u003Ccode>\u002F\u002F localazy.keys.json\n{\n    \"writeKey\": \"&lt;your-apps-write-key&gt;\", \n    \"readKey\": \"&lt;your-apps-read-key&gt;\"\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Add the \u003Ccode>localazy.keys.json\u003C\u002Fcode> to the \u003Ccode>.gitignore\u003C\u002Fcode> file to prevent it from being tracked by git and pushed to the remote repository.\u003C\u002Fp>\u003Cp>The reason for keeping our authorization keys separate in \u003Ccode>localazy.keys.json\u003C\u002Fcode> from other Localazy configurations in \u003Ccode>localazy.json\u003C\u002Fcode> is so that we can push the configuration file to our repository without exposing our authorization keys.\u003C\u002Fp>\u003Ch3 id=\"add-localazy-configuration-script\">Add Localazy configuration script\u003C\u002Fh3>\u003Cp>In the project root folder, create a configuration script called \u003Ccode>localazy.json\u003C\u002Fcode> which tells the CLI what files to upload and how to process the downloaded translations. There are a lot of configurations that can be done, and you can have an in-depth read of them \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fcli\u002Fthe-basics\">here\u003C\u002Fa>. It’s also good to note some of the features also depend on the pricing tier being used. For example, format conversions are not available in the free tier.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F localazy.json\n{\n    \"upload\": {\n      \"type\": \"json\",\n      \"files\": \"src\u002Fassets\u002Flocales\u002Fen.json\"\n    },\n    \"download\": {\n      \"files\": \"src\u002Fassets\u002Flocales\u002F${lang}.json\"\n    }  \n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Breakdown of the code snippet above and what it does:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>upload:\u003C\u002Fstrong> object specifies the type of files to be uploaded and the path of the files.\u003C\u002Fli>\u003Cli>\u003Cstrong>download:\u003C\u002Fstrong> object describes how to process translated files and where to store them in the directory.\u003C\u002Fli>\u003Cli>\u003Cstrong>${lang}:\u003C\u002Fstrong> is a variable used to specify the language translated to using the language code such as es, de, fr, and more.\u003C\u002Fli>\u003C\u002Ful>\u003Ch3 id=\"add-localazy-commands-to-packagejson\">Add Localazy commands to package.json\u003C\u002Fh3>\u003Cp>To enable working with others on the project, we will add the localazy download and upload commands in the \u003Ccode>package.json\u003C\u002Fcode> script commands to make it easily accessible.\u003C\u002Fp>\u003Cp>The \u003Ccode>localazy:download-remote\u003C\u002Fcode> script will be used to download files on remote repositories. Remember, we are not pushing the \u003Ccode>localazy.keys.json\u003C\u002Fcode> to the remote repository, so the remote repository needs a way to get the authorization keys. This script enables us to access the write and read keys from the environment variables and also use the release tag feature for various environments. Locally, we will use the `latest` version, which is the default, so it does not need to be specified.\u003C\u002Fp>\u003Cp>The \u003Ccode>localazy:publish\u003C\u002Fcode> script will be run to publish or promote tags from a source tag to a target tag. It also uses the write and read keys from the environment variables. It also includes the \u003Ccode>LOCALAZY_FROM_RELEASE_TAG\u003C\u002Fcode> as the source tag and \u003Ccode>LOCALAZY_RELEASE_TAG\u003C\u002Fcode> as the target tag. This enables us to publish the release tag: latest to staging for previews and staging to production for the production site.\u003C\u002Fp>\u003Cp>The \u003Ccode>build\u003C\u002Fcode> script is modified to run the \u003Ccode>localazy:publish\u003C\u002Fcode> and \u003Ccode>localazy:download-remote\u003C\u002Fcode> scripts before the build.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F package.json\n\n\"scripts\": {\n    \u002F\u002F ... other commands\n    \"localazy:upload\": \"localazy upload\",\n    \"localazy:download\": \"localazy download\",\n    \"localazy:download-remote\": \"localazy download -r $LOCALAZY_READ_KEY -w $LOCALAZY_WRITE_KEY -t $LOCALAZY_RELEASE_TAG\",\n    \"localazy:publish\": \"localazy tag -r $LOCALAZY_READ_KEY -w $LOCALAZY_WRITE_KEY promote $LOCALAZY_FROM_RELEASE_TAG  $LOCALAZY_RELEASE_TAG\",\n    \"build\": \"npm run localazy:publish &amp;&amp; npm run localazy:download-remote &amp;&amp; react-scripts build\",\n    \u002F\u002F ... other commands\n },\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Note: Do not remove other commands in the scripts property\u003C\u002Fstrong>\u003C\u002Fp>\u003Ch3 id=\"upload-files-to-localazy\">Upload files to Localazy\u003C\u002Fh3>\u003Cp>Run the command to upload files to the Localazy project.\u003C\u002Fp>\u003Cpre>\u003Ccode>npm run localazy:upload\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"add-languages\">Add languages\u003C\u002Fh3>\u003Cp>Add the languages to be translated to on the Localazy dashboard. I added Czech, Finnish, and Spanish Languages. \u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-11.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"834\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-11.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-11.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-11.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"set-up-automatic-upload\">Set up automatic upload\u003C\u002Fh3>\u003Cp>To enable automatic upload when a commit is made, we will use \u003Ca href=\"https:\u002F\u002Ftypicode.github.io\u002Fhusky\u002F#\u002F\">husky\u003C\u002Fa>.\u003C\u002Fp>\u003Cpre>\u003Ccode>npx husky-init &amp;&amp; npm install\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This command sets up husky, modifies the \u003Ccode>package.json\u003C\u002Fcode>, and creates a sample pre-commit hook that can be edited. The default command in the pre-commit hook is \u003Ccode>npm test\u003C\u002Fcode> which will run once a commit is made.\u003C\u002Fp>\u003Cp>To change the pre-commit command, navigate to the \u003Ccode>.husky\u002Fpre-commit\u003C\u002Fcode> file and change the \u003Ccode>npm test\u003C\u002Fcode> to \u003Ccode>npm run upload\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%93%87-push-code-to-a-remote-git-repository\">📇 Push code to a remote git repository\u003C\u002Fh2>\u003Cp>This is when we push our code to a remote git repository such as Github, Bitbucket, Gitlab, etc. Create a new repository on any of these platforms and follow the steps listed. You can add new strings to your source file and commit. Then, confirm on the Localazy dashboard that the changes were uploaded to Localazy based on \u003Ca href=\"https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1QEyKpNXzuCBt1UmbVsMiY5OeP1eTGg0ZDBN2ZikDrvc\u002Fedit#heading=h.groef9827tqo\">Step 7: Set up Automatic Upload\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>If you have any issues while trying to commit the changes, ensure Localazy authorization keys are set up in the \u003Ccode>localazy.keys.json\u003C\u002Fcode> file and try again.\u003C\u002Fp>\u003Ch2 id=\"%F0%9F%95%B9%EF%B8%8F-integrating-vercel-builds\">🕹️ Integrating Vercel builds\u003C\u002Fh2>\u003Cp>There are two major ways of deploying on Vercel:\u003C\u002Fp>\u003Cul>\u003Cli>Importing a git repository\u003C\u002Fli>\u003Cli>Using a custom CI\u002FCD workflow with Vercel\u003C\u002Fli>\u003C\u002Ful>\u003Cp>When you import a git repository, Vercel clones your code, then builds and deploys your application. This method requires zero integrations and is ready to use.\u003C\u002Fp>\u003Cp>Using a custom CI\u002FCD workflow with Vercel CLI, you need to write a deployment script. This is ideal when you do not want Vercel to clone your code and also want to perform other CI operations. Also, you can add and commit the downloaded files to the code repository.\u003C\u002Fp>\u003Ch3 id=\"importing-git-repository\">Importing git repository\u003C\u002Fh3>\u003Cp>The easiest way to integrate with Vercel is by importing a git project repository.\u003C\u002Fp>\u003Cp>\u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fsignup\">Sign up\u003C\u002Fa> if you do not have a Vercel account or \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Flogin\">log in\u003C\u002Fa> if you have one. You can easily create an account by connecting to your Git provider.\u003C\u002Fp>\u003Ch4 id=\"import-project-on-vercel\">Import project on Vercel\u003C\u002Fh4>\u003Cp>Add a new project by importing a repository from your git provider. Go to the environment variables section and add the authorization and release tag keys with their values:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-12.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"970\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-12.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-12.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-12.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>We will later update the environment variables release tag variable to use the right one. Deploy application.\u003C\u002Fp>\u003Ch4 id=\"update-the-release-tag-for-different-environments\">Update the release tag for different environments\u003C\u002Fh4>\u003Cp>Navigate to the settings within the project dashboard. Go to environment variables in the sidebar.\u003C\u002Fp>\u003Cp>On this page, scroll to the \u003Ccode>LOCALAZY_RELEASE_TAG\u003C\u002Fcode> variable and edit it. Uncheck the production and preview checkboxes and save changes.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-13.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"882\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-13.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-13.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-13.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Add new environment variables for staging (preview) and production environments release tags as shown below. Save and repeat for all.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-14.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"700\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-14.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-14.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-14.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>The list of environment variables should look like this:\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-15.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"953\" height=\"652\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-15.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-15.png 953w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch3 id=\"using-a-custom-cicd-workflow-with-vercel-cli\">Using a custom CI\u002FCD workflow with Vercel CLI\u003C\u002Fh3>\u003Ch4 id=\"create-vercel-deployment-script-files\">Create Vercel deployment script files\u003C\u002Fh4>\u003Cp>In the local repository, create the Vercel deployment scripts based on the CI\u002FCD workflow to be used. The way to structure deployment files for different workflows differs. Read about \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-can-i-use-github-actions-with-vercel\">GitHub Actions\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-can-i-use-bitbucket-pipelines-with-vercel\">Bitbucket pipelines\u003C\u002Fa>, and \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-can-i-use-gitlab-pipelines-with-vercel\">GitLab pipeline\u003C\u002Fa> integrations with Vercel using the links.\u003C\u002Fp>\u003Cp>Then, add a job to set up Localazy before the Vercel job. The steps involve installing Localazy CLI, publishing release tags, and downloading translated files. Also, ensure the Vercel job depends on the Localazy job to ensure files are downloaded before the Vercel build.\u003C\u002Fp>\u003Cp>The \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Factions\u002Fcheckout\">\u003Ccode>actions\u002Fcheckout@v3\u003C\u002Fcode>\u003C\u002Fa> configures a \u003Ccode>token\u003C\u002Fcode> for HTTP that enables scripts to run authenticated git commands. This will enable the downloaded commit to be pushed to the code repository. If you used SSH to set up the repository, you will configure a \u003Ccode>ssh-key\u003C\u002Fcode> instead.\u003C\u002Fp>\u003Cp>To ensure the downloaded files are added to our code repository, the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fgit-auto-commit\">git-auto-commit\u003C\u002Fa> action was used. To prevent the automatic upload created \u003Ca href=\"https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1QEyKpNXzuCBt1UmbVsMiY5OeP1eTGg0ZDBN2ZikDrvc\u002Fedit#heading=h.groef9827tqo\">here\u003C\u002Fa>, the \u003Ccode>commit_options: '--no-verify'\u003C\u002Fcode> was added to prevent the pre-commit hook from running as we do not want to upload translations. For the Localazy download guide, use these articles for \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fautomated-localization-github-actions-localazy\">GitHub Actions\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fblog\u002Fautomated-localization-gitlab-cicd-localazy\">GitLab pipelines\u003C\u002Fa>.\u003C\u002Fp>\u003Cp>YAML file format is commonly used to write deployment configuration files, similar to JSON and XML. If you are new to working with a YAML file, it is important to note that indentation matters. You could also check this \u003Ca href=\"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fwhat-is-yaml-the-yml-file-format\u002F\">article\u003C\u002Fa> for a quick brush through.\u003C\u002Fp>\u003Cp>For GitHub actions, this is how the production deployment file looks after setting up all the steps.\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F .github\u002Fworkflows\u002Fproduction-deployment.yaml\n\nname: Vercel Production Deployment\nenv:\n  VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}\n  VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}\n  LOCALAZY_FROM_RELEASE_TAG: ${{ secrets.LOCALAZY_STAGING_RELEASE_TAG }}\n  LOCALAZY_RELEASE_TAG: ${{ secrets.LOCALAZY_PROD_RELEASE_TAG }}\n  LOCALAZY_READ_KEY: ${{ secrets.LOCALAZY_READ_KEY }}\n  LOCALAZY_WRITE_KEY: ${{ secrets.LOCALAZY_WRITE_KEY }}\non:\n  push:\n    branches:\n      - master\njobs:\n  Localazy-download:\n    name: Download strings from Localazy\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v3\n        with:\n          fetch-depth: '0'\n          token: ${{ secrets.TOKEN }}\n      - name: Install localazy\u002Fcli and other dependencies\n        run: npm install\n      - name: Publish production release tag\n        run: npm run localazy:publish\n      - name: Download translated files\n        uses: localazy\u002Fdownload@v1\n        with:\n          read_key: ${{ secrets.LOCALAZY_READ_KEY }}\n          write_key: ${{ secrets.LOCALAZY_WRITE_KEY }}\n          release_tag: ${{ secrets.LOCALAZY_PROD_RELEASE_TAG }}\n          \n      - run: |\n          # Test that localized files were downloaded by listing \n          # the content of locales folder.\n          ls src\u002Fassets\u002Flocales\u002F*.json\n      - name: Commit translation changes to repository\n        uses: stefanzweifel\u002Fgit-auto-commit-action@v4\n        with:\n          commit_message: Commit latest translations from Localazy.\n          commit_options: '--no-verify'\n          branch: master\n\n  Deploy-Production:\n    name: Deploy previews on vercel\n    needs: Localazy-download\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v3\n      - name: Install Vercel CLI\n        run: npm install --global vercel@latest\n      - name: Pull Vercel Environment Information\n        run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}\n      - name: Build Project Artifacts\n        run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}\n      - name: Deploy Project Artifacts to Vercel\n      \trun: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>The preview deployment is also similar. I used the master branch as my production branch because that is my default branch. Yours might be different like \u003Ccode>main\u003C\u002Fcode> or something else. Ensure you use the right branch name.\u003C\u002Fp>\u003Cp>Add the necessary environment variables. The Localazy variables are used by the localazy publish release tag. I used the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Flocalazy-download\">localazy download action\u003C\u002Fa> available in the GitHub marketplace. If you do not have one in your CI\u002FCD marketplace, you could just use the \u003Ccode>npm run localazy:download-remote\u003C\u002Fcode> command and it will use the env variables declared above.\u003C\u002Fp>\u003Ch4 id=\"update-packagejson-file\">Update package.json file\u003C\u002Fh4>\u003Cp>Update the build script back to\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F package.json\n\n\"scripts\": {\n    \u002F\u002F ... other commands\n    \"build\": \"react-scripts build\",\n    \u002F\u002F ... other commands\n },\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch4 id=\"add-secrets-to-the-repository\">Add secrets to the repository\u003C\u002Fh4>\u003Cp>Get the secret values and add Localazy and Vercel secrets to the repository that will run the workflow. I added mine to GitHub and followed these steps.\u003C\u002Fp>\u003Cul>\u003Cli>Retrieve your \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fguides\u002Fhow-do-i-use-a-vercel-api-access-token\">Vercel Access Token\u003C\u002Fa> from your Vercel dashboard.\u003C\u002Fli>\u003Cli>Then, install the \u003Ca href=\"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcli\">Vercel CLI\u003C\u002Fa> locally using \u003Ccode>npm i -g vercel\u003C\u002Fcode> and run \u003Ccode>vercel login\u003C\u002Fcode>.\u003C\u002Fli>\u003Cli>Inside the project folder, run \u003Ccode>vercel link\u003C\u002Fcode> to create a new Vercel project.\u003C\u002Fli>\u003Cli>Get the Vercel \u003Ccode>projectId\u003C\u002Fcode> and \u003Ccode>orgId\u003C\u002Fcode>  from the generated .vercelfolder. It is in the project.json file.\u003C\u002Fli>\u003Cli>Create a \u003Ca href=\"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fkeeping-your-account-and-data-secure\u002Fcreating-a-personal-access-token\">personal access token\u003C\u002Fa> that will be used to authenticate git commands, which is used as TOKEN in the YAML file.\u003C\u002Fli>\u003Cli>In GitHub or your CI platform, go to the repository secrets, under settings, and add VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID, and other Localazy variables used in the deployment file.\u003C\u002Fli>\u003C\u002Ful>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-16.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1566\" height=\"1290\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-16.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-16.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-16.png 1566w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch4 id=\"push-updates-to-the-repository\">Push updates to the repository\u003C\u002Fh4>\u003Cp>You can create a new repository or use the existing one. On push to the repository, the workflow action runs, and the code is deployed. If the actions fail, it might be due to not setting up the secrets needed in the YAML file. Confirm everything is well set up and rerun workflow.\u003C\u002Fp>\u003Cp>You will notice the commit generated when files are downloaded triggers the workflow again. To fix this, adding the [skip-ci] to the end of the commit message can stop the build from running in \u003Ca href=\"https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fmanaging-workflow-runs\u002Fskipping-workflow-runs\">GitHub\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fsupport.atlassian.com\u002Fbitbucket-cloud\u002Fdocs\u002Fpush-back-to-your-repository\u002F\">BitBucket\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fsupport.atlassian.com\u002Fbitbucket-cloud\u002Fdocs\u002Fpush-back-to-your-repository\u002F\">GitLab\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.travis-ci.com\u002Fuser\u002Fcustomizing-the-build\u002F#skipping-a-build\">Travis CI\u003C\u002Fa>, etc. Push changes and confirm the workflow runs once for each push.\u003C\u002Fp>\u003Ch2 id=\"%E2%9D%A4%EF%B8%8F-view-the-deployed-application\">❤️ View the deployed application\u003C\u002Fh2>\u003Cp>View the application by clicking the Visit button or any of the domain links in the deployment tab of the project dashboard. Notice on switching languages, the strings are not translated yet and use the fallback language.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-17.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"884\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-17.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-17.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-17.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"%F0%9F%93%97-translate-uploaded-strings-on-localazy\">📗 Translate uploaded strings on Localazy\u003C\u002Fh2>\u003Cp>There are several ways to translate with Localazy ranging from ordering \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fcontinuous-localization-team\">continuous translations\u003C\u002Fa> such as professional translations and proofreading to using human-assisted \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fadditional-mt-engines\">machine translations\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Fdocs\u002Fgeneral\u002Fwhat-is-localazy-sharetm\">community translations\u003C\u002Fa> (ShareTM). \u003C\u002Fp>\u003Cp>We will be using the ShareTM translations and the Amazon Machine translations available in the \u003Ca href=\"https:\u002F\u002Flocalazy.com\u002Ftiers\u002Ffree\">Free tier.\u003C\u002Fa>\u003C\u002Fp>\u003Cp>Navigate to the languages on the dashboard and select a language option by clicking the icon on the right. Click on \u003Cstrong>Start translating\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-18.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"884\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-18.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-18.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-18.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Cp>Select a translation from the suggestions by clicking the \u003Cstrong>USE THIS\u003C\u002Fstrong> button and save the translation. Repeat this step for all the strings and all languages.\u003C\u002Fp>\u003Cfigure class=\"kg-card kg-image-card\">\u003Cimg src=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-19.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1600\" height=\"886\" srcset=\"https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw600\u002F2023\u002F07\u002Fimage-19.png 600w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002Fsize\u002Fw1000\u002F2023\u002F07\u002Fimage-19.png 1000w, https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F07\u002Fimage-19.png 1600w\" sizes=\"(min-width: 720px) 720px\">\u003C\u002Ffigure>\u003Ch2 id=\"%F0%9F%94%84-redeploy-the-application-on-vercel\">🔄 Redeploy the application on Vercel\u003C\u002Fh2>\u003Cp>Checkout to a new branch, make some updates and push. Create a pull request against the production branch. Check the preview link to confirm the translations were published and downloaded. Compare it with the production site, and you will notice the production site does not have the translation changes or updates yet.\u003C\u002Fp>\u003Cp>Merge the branch to the production \u003Ccode>master\u003C\u002Fcode> branch and confirm the translations work as expected by checking the live site. If you used the CI\u002FCD workflow, also check the \u003Ccode>src\u002Fassets\u002Flocales\u003C\u002Fcode> folder, and you will see the downloaded files.\u003C\u002Fp>\u003Cp>Also, if changes are not made to the repository and some translations were made, we can just redeploy the application on Vercel or rerun the CI\u002FCD workflow, and the changes get published.\u003C\u002Fp>\u003Cp>You can see my deployed application \u003Ca href=\"https:\u002F\u002Flocalazy-vercel-integration.vercel.app\u002F\">here\u003C\u002Fa>.\u003C\u002Fp>\u003Ch2 id=\"%E2%9C%94%EF%B8%8F-conclusion\">✔️ Conclusion\u003C\u002Fh2>\u003Cp>We have successfully set up a workflow that enables us to integrate Localazy with Vercel builds by either importing a git repository or using a custom CI\u002FCD workflow. If you have not been integrating your localized application with Vercel, I hope you consider this for its benefits and easy integration.\u003C\u002Fp>\u003Cp>The integration gives room for different teams and projects to customize when they want to run their builds to suit their needs. Also, teams should put a structure in place to ensure files are translated before the build runs and translation works as expected before merging pull requests to avoid issues. Another way will be to rerun the builds whenever the translations are done.\u003C\u002Fp>\u003Cp>View the Localazy-Vercel integrations using the import git repository \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMoyinoluwaA\u002FLocalazy-Vercel-Integration\">here\u003C\u002Fa> and using the GitHub Actions \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMoyinoluwaA\u002FLocalazy-Vercel-ci-Integration\">here\u003C\u002Fa>.\u003C\u002Fp>","public","none","2023-06-29T22:27:34.000+02:00",[1968],{"id":1860,"name":1861,"slug":1862,"profile_image":1863,"cover_image":13,"bio":1969,"website":1970,"location":1971,"facebook":13,"twitter":13,"meta_title":13,"meta_description":13,"url":1972},"I am a full-stack web developer and technical writer that has worked with JavaScript and its frameworks. I write to share knowledge, and I love creating resources which can guide other developers.","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmoyinoluwa-adenuga\u002F","Nigeria","https:\u002F\u002Fghost.localazy.com\u002Fauthor\u002Fmoyinoluwa-adenuga\u002F",[1974,1977,1980,1985,1988,1993,1999,2004,2009,2012,2017,2022,2027,2033,2039],{"id":1975,"name":1870,"slug":1871,"description":13,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1976},"64ad4b73047091000193d780","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fvercel\u002F",{"id":1978,"name":1873,"slug":1874,"description":1873,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1979},"60a37fc7cf7b6a0001d1f0fa","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fhowto\u002F",{"id":1981,"name":1982,"slug":1983,"description":13,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1984},"63f8915e047091000193a863","[AD] CDN","ad-cdn","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fad-cdn\u002F",{"id":1986,"name":144,"slug":145,"description":144,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1987},"60a37fc7cf7b6a0001d1f0e8","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcli\u002F",{"id":1989,"name":1990,"slug":1991,"description":13,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1992},"60fffb486f8ebe0001bd8ddd","[COMSHARE]","comshare","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcomshare\u002F",{"id":1994,"name":1995,"slug":1996,"description":1997,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1998},"60ba4b8fcf7b6a0001d1f9b9","[CTA] Enjoy localization on autopilot! 🚀","cta-16","Grab the brand new Autopilot plan and let Localazy translate your apps while you sleep. Automatically.","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fcta-16\u002F",{"id":2000,"name":2001,"slug":2002,"description":13,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2003},"61a0daffdf4bcb00010bc50c","[SYNDICATE]","syndicate","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fsyndicate\u002F",{"id":2005,"name":2006,"slug":2007,"description":1881,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2008},"60a37fc7cf7b6a0001d1f161","[DICT] React","term-68","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-68\u002F",{"id":2010,"name":9,"slug":10,"description":9,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2011},"60a37fc7cf7b6a0001d1f0fc","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Freact\u002F",{"id":2013,"name":2014,"slug":2015,"description":1885,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2016},"60a37fc7cf7b6a0001d1f162","[DICT] Angular","term-69","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-69\u002F",{"id":2018,"name":2019,"slug":2020,"description":1894,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2021},"60a37fc7cf7b6a0001d1f16c","[DICT] Internationalization (i18n)","term-79","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-79\u002F",{"id":2023,"name":2024,"slug":2025,"description":1907,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2026},"60a37fc7cf7b6a0001d1f168","[DICT] JavaScript","term-75","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-75\u002F",{"id":2028,"name":2029,"slug":2030,"description":2031,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2032},"61af9d57df4bcb00010bc95b","[DICT] JSON","term-108","JSON stands for JavaScript Object Notation and it's a widely used File Format.","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-108\u002F",{"id":2034,"name":2035,"slug":2036,"description":2037,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2038},"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":2040,"name":2041,"slug":2042,"description":1945,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":2043},"60a37fc7cf7b6a0001d1f163","[DICT] Vue.js","term-70","https:\u002F\u002Fghost.localazy.com\u002Ftag\u002Fterm-70\u002F",{"id":1860,"name":1861,"slug":1862,"profile_image":1863,"cover_image":13,"bio":1969,"website":1970,"location":1971,"facebook":13,"twitter":13,"meta_title":13,"meta_description":13,"url":1972},{"id":1975,"name":1870,"slug":1871,"description":13,"feature_image":13,"visibility":1964,"og_image":13,"og_title":13,"og_description":13,"twitter_image":13,"twitter_title":13,"twitter_description":13,"meta_title":13,"meta_description":13,"codeinjection_head":13,"codeinjection_foot":13,"canonical_url":13,"accent_color":13,"url":1976},"https:\u002F\u002Fghost.localazy.com\u002Fhow-to-integrate-localazy-into-vercel-builds-for-frontend-applications\u002F",[2048,2070,2090],{"id":2049,"owner":2050,"created_by":13,"sort":13,"title":2055,"slug":2056,"modified_on":1042,"created_on":2057,"pinned":14,"badge":13,"priority":1824,"main_image":2058,"status":6,"tags":2059,"dictionary":2069,"reading_time":1835,"excerpt":-1,"og_title":1042,"og_description":1042,"og_image":1042},"6372308e04709100019374c9",{"id":2051,"first_name":2052,"last_name":1042,"slug":2053,"avatar":2054},"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",[2060,2062,2063,2066],{"id":2061,"created_on":1828,"status":6,"label":940,"slug":941,"on_index_page":16},6183,{"id":68,"created_on":1828,"status":6,"label":1873,"slug":1874,"on_index_page":14},{"id":68,"created_on":1828,"status":6,"label":2064,"slug":2065,"on_index_page":16},"DevTips","devtips",{"id":110,"created_on":1828,"status":6,"label":2067,"slug":2068,"on_index_page":14},"Design","design",[],{"id":2071,"owner":2072,"created_by":13,"sort":13,"title":2077,"slug":2078,"modified_on":1042,"created_on":2079,"pinned":14,"badge":13,"priority":1824,"main_image":2080,"status":6,"tags":2081,"dictionary":2089,"reading_time":1835,"excerpt":-1,"og_title":1042,"og_description":1042,"og_image":1042},"64347aaa047091000193b03f",{"id":2073,"first_name":2074,"last_name":1042,"slug":2075,"avatar":2076},"61dc4e87df4bcb00010bd508","Mary Okosun","mary-okosun","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F12\u002Fokosun.png","How to use Localazy CLI to streamline your localization workflow","how-to-use-localazy-cli-to-streamline-your-localization-workflow","2023-05-16T17:18:35.000+02:00","https:\u002F\u002Fghost.localazy.com\u002Fcontent\u002Fimages\u002F2023\u002F05\u002Fultimate-localazy-CLI-guide.png",[2082,2083,2086],{"id":68,"created_on":1828,"status":6,"label":144,"slug":145,"on_index_page":14},{"id":68,"created_on":1828,"status":6,"label":2084,"slug":2085,"on_index_page":14},"Continuous Localization","continuous-localization",{"id":68,"created_on":1828,"status":6,"label":2087,"slug":2088,"on_index_page":14},"Guide","guide",[],{"id":2091,"owner":2092,"created_by":13,"sort":13,"title":2093,"slug":2094,"modified_on":1042,"created_on":2095,"pinned":14,"badge":13,"priority":1824,"main_image":2096,"status":6,"tags":2097,"dictionary":2104,"reading_time":1835,"excerpt":-1,"og_title":1042,"og_description":1042,"og_image":1042},"63dd1bf30470910001939f8b",{"id":2073,"first_name":2074,"last_name":1042,"slug":2075,"avatar":2076},"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",[2098,2099,2102,2103],{"id":68,"created_on":1828,"status":6,"label":75,"slug":76,"on_index_page":14},{"id":68,"created_on":1828,"status":6,"label":2100,"slug":2101,"on_index_page":14},"Automated Localization","automated-localization",{"id":68,"created_on":1828,"status":6,"label":1873,"slug":1874,"on_index_page":14},{"id":68,"created_on":1828,"status":6,"label":2087,"slug":2088,"on_index_page":14},[],{"id":295,"sort":13,"created_on":2106,"name":1761,"cta_link":2107,"banner_image":2108},"2023-02-21T22:35:37.000Z","https:\u002F\u002Flocalazy.com\u002Ffeatures\u002Flanguage-cdn",{"id":2109},"8ae4b273-168e-4b39-85c2-f79282929ecb"]