{"id":1580,"date":"2018-11-20T09:23:41","date_gmt":"2018-11-20T08:23:41","guid":{"rendered":"https:\/\/www.thecodecampus.de\/blog\/?p=1580"},"modified":"2023-12-20T19:55:27","modified_gmt":"2023-12-20T18:55:27","slug":"building-an-angular-app-in-parallel-for-multiple-languages","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/","title":{"rendered":"Building an Angular App in parallel for multiple languages"},"content":{"rendered":"\r\n<h2 class=\"wp-block-heading\">Problem<\/h2>\r\n\r\n\r\n\r\n<p>When using the built-in <a href=\"https:\/\/angular.io\/guide\/i18n\">Angular Internationalization (i18n)<\/a>\u00a0the Angular guide tells you in detail what you have to do to set up your application to support multiple languages. The guide lacks the details on how to properly integrate the build into a common web application deployment workflow. In this brief blog post I&#8217;m going to show an elegant solution, that does not require external bash\/shell script, but uses the power npm provides itself. This works <strong>cross-platform<\/strong> unlike some other techniques that won&#8217;t work for Windows users.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">tl;dr;<\/h2>\r\n\r\n\r\n\r\n<p>Install and use the <a href=\"https:\/\/www.npmjs.com\/package\/npm-run-all\">npm-run-all<\/a> package to be able to use wildcards within your npm run scripts. Add a npm run command for each language with the following naming pattern<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">build:[language]<\/pre>\r\n\r\n\r\n\r\n<p>Add a npm run all script, that executes every command matching the pattern in parallel<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">run-p \\\"build:* -- --configuration=production\\\"<\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Implementation in detail<\/h2>\r\n\r\n\r\n\r\n<p>We&#8217;re going to use a npm package called\u00a0<a href=\"https:\/\/www.npmjs.com\/package\/npm-run-all\">npm-run-all<\/a>\u00a0to build our application\u00a0in parallel for every language we want to support. This is what you want to do on your buildserver because it typically has more RAM or processors than your developer machine.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Install dependencies<\/h3>\r\n\r\n\r\n\r\n<p>We&#8217;re going to use a npm package called <a href=\"https:\/\/www.npmjs.com\/package\/npm-run-all\">npm-run-all<\/a>. Install this package as a devDependency using the following command<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">npm i -D npm-run-all<\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Add run scripts to package.json<\/h3>\r\n\r\n\r\n\r\n<p>The newly installed package now lets you use two commands which support wildcards. <strong>run-p<\/strong> lets you run scripts in parallel whereas <strong>run-s<\/strong> executes the commands sequentially.<\/p>\r\n\r\n\r\n\r\n<p>We&#8217;re going to add a command for each language we want to build the application for. Note that for this example I stripped the supplied parameters for each command. Typically you want to supply a base-href parameter depending on how your production server is configured.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>package.json\r\n{\r\n  \"name\": \"myApp\",\r\n  \"version\": \"1.0.0\",\r\n  \"scripts\": {\r\n    \"build\": \"run-p \\\"build:* -- --configuration=production\\\"\",\r\n    \"build:en\": \"ng build\",\r\n    \"build:de\": \"ng build --i18n-locale=de\",\r\n    \"build:fr\": \"ng build --i18n-locale=fr\",\r\n    \"build:es\": \"ng build --i18n-locale=es\"\r\n  }\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<p>The sugar is within the <strong>build<\/strong> entry. We&#8217;re using the run-p command to run all commands matching the pattern <strong>build:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>We are still able to pass common parameters to all of the child commands. You have to use escaped brackets and additional double dashes to make this work properly.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Use the script<\/h3>\r\n\r\n\r\n\r\n<p>You are now able to build your application for multiple locales with the use of just one npm command. In the terminal of your choice execute the following command. Note that the output might look a bit scrambled.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">npm run build<\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"581\" height=\"411\" class=\"wp-image-1582\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png\" alt=\"\" srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png 581w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all-300x212.png 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Further Reading<\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/www.npmjs.com\/package\/npm-run-all\">npm-run-all package<\/a><\/li>\r\n<li><a href=\"https:\/\/angular.io\/guide\/i18n\">Angular i18n guide<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Problem When using the built-in Angular Internationalization (i18n)\u00a0the Angular guide tells you in detail what you have to do to set up your application to support multiple languages. The guide lacks the details on how to properly integrate the build into a common web application deployment workflow. In this brief blog post I&#8217;m going to [&#8230;]<br \/><a class=\"meta-big\" href=\"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/\"> READ MORE<\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[73,79],"tags":[],"class_list":["post-1580","post","type-post","status-publish","format-standard","hentry","category-angular","category-tooling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building an Angular App in parallel for multiple languages - Web Development Blog<\/title>\n<meta name=\"description\" content=\"Elevate Angular app reach. Build for multiple languages. Optimize internationalization. Expand your app&#039;s horizons now!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building an Angular App in parallel for multiple languages - Web Development Blog\" \/>\n<meta property=\"og:description\" content=\"Elevate Angular app reach. Build for multiple languages. Optimize internationalization. Expand your app&#039;s horizons now!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-20T08:23:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-20T18:55:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png\" \/>\n<meta name=\"author\" content=\"Kai Henzler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kai Henzler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/\"},\"author\":{\"name\":\"Kai Henzler\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/b9decc610011ed03b2117b5e02032132\"},\"headline\":\"Building an Angular App in parallel for multiple languages\",\"datePublished\":\"2018-11-20T08:23:41+00:00\",\"dateModified\":\"2023-12-20T18:55:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/\"},\"wordCount\":395,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/11\\\/npm-run-all.png\",\"articleSection\":[\"Angular\",\"Tooling\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/\",\"name\":\"Building an Angular App in parallel for multiple languages - Web Development Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/11\\\/npm-run-all.png\",\"datePublished\":\"2018-11-20T08:23:41+00:00\",\"dateModified\":\"2023-12-20T18:55:27+00:00\",\"description\":\"Elevate Angular app reach. Build for multiple languages. Optimize internationalization. Expand your app's horizons now!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/11\\\/npm-run-all.png\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/11\\\/npm-run-all.png\",\"width\":581,\"height\":411},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/building-an-angular-app-in-parallel-for-multiple-languages\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building an Angular App in parallel for multiple languages\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/b9decc610011ed03b2117b5e02032132\",\"name\":\"Kai Henzler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/kai-henzler-tcc-author-96x96.webp\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/kai-henzler-tcc-author-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/kai-henzler-tcc-author-96x96.webp\",\"caption\":\"Kai Henzler\"},\"description\":\"I'm a web developer who is around since the AngularJS days (10+ years). My focus is on teaching others how to write simple and maintainable code.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/kai-henzler-58484599\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/khenzler\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building an Angular App in parallel for multiple languages - Web Development Blog","description":"Elevate Angular app reach. Build for multiple languages. Optimize internationalization. Expand your app's horizons now!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/","og_locale":"en_US","og_type":"article","og_title":"Building an Angular App in parallel for multiple languages - Web Development Blog","og_description":"Elevate Angular app reach. Build for multiple languages. Optimize internationalization. Expand your app's horizons now!","og_url":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2018-11-20T08:23:41+00:00","article_modified_time":"2023-12-20T18:55:27+00:00","og_image":[{"url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png","type":"","width":"","height":""}],"author":"Kai Henzler","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kai Henzler","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/"},"author":{"name":"Kai Henzler","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/b9decc610011ed03b2117b5e02032132"},"headline":"Building an Angular App in parallel for multiple languages","datePublished":"2018-11-20T08:23:41+00:00","dateModified":"2023-12-20T18:55:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/"},"wordCount":395,"commentCount":2,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png","articleSection":["Angular","Tooling"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/","url":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/","name":"Building an Angular App in parallel for multiple languages - Web Development Blog","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#primaryimage"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png","datePublished":"2018-11-20T08:23:41+00:00","dateModified":"2023-12-20T18:55:27+00:00","description":"Elevate Angular app reach. Build for multiple languages. Optimize internationalization. Expand your app's horizons now!","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#primaryimage","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2018\/11\/npm-run-all.png","width":581,"height":411},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/building-an-angular-app-in-parallel-for-multiple-languages\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Building an Angular App in parallel for multiple languages"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/b9decc610011ed03b2117b5e02032132","name":"Kai Henzler","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/06\/kai-henzler-tcc-author-96x96.webp","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/06\/kai-henzler-tcc-author-96x96.webp","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/06\/kai-henzler-tcc-author-96x96.webp","caption":"Kai Henzler"},"description":"I'm a web developer who is around since the AngularJS days (10+ years). My focus is on teaching others how to write simple and maintainable code.","sameAs":["https:\/\/www.linkedin.com\/in\/kai-henzler-58484599\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/khenzler\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/1580","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=1580"}],"version-history":[{"count":11,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/1580\/revisions"}],"predecessor-version":[{"id":2719,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/1580\/revisions\/2719"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=1580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=1580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=1580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}