{"id":680,"date":"2016-10-13T14:52:00","date_gmt":"2016-10-13T14:52:00","guid":{"rendered":"https:\/\/staging.infragistics.com\/blogs\/?p=680"},"modified":"2025-02-25T15:32:17","modified_gmt":"2025-02-25T15:32:17","slug":"multilingual-asp-net-core-website","status":"publish","type":"post","link":"https:\/\/www.infragistics.com\/blogs\/multilingual-asp-net-core-website","title":{"rendered":"Building Simple Multilingual ASP.NET Core Website"},"content":{"rendered":"\n<p>Today we\u2019re going to concentrate on Windows. ASP.NET Core contains some differences compared to ASP.NET MVC 5, so it\u2019s a good idea to start with something simple and our website, which consist of two webpages, both in three languages, it\u2019s good offer to start with.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"creating-net-core-environment-on-windows\">Creating .NET Core environment on Windows<\/h2>\n\n\n\n<p>To start with ASP.NET Core, we need to have Visual Studio 2015 with Visual Studio Update 3 installed. Skip this step, if you already installed both of them. If not, you can get Visual Studio Community for free here:&nbsp;<a href=\"https:\/\/www.visualstudio.com\/en-us\/downloads\/download-visual-studio-vs.aspx\" target=\"_blank\" rel=\"noreferrer noopener\">Visual Studio Community 2015 Download<\/a>&nbsp;and Visual Studio Update 3 here:&nbsp;<a href=\"https:\/\/www.visualstudio.com\/en-us\/news\/releasenotes\/vs2015-update3-vs\" target=\"_blank\" rel=\"noreferrer noopener\">Visual Studio Update 3 Download<\/a>. During installation of Visual Studio Community 2015, just select the default installation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"installing-net-core-1-0-for-visual-studio-and-net-core-windows-server-hosting\">Installing .NET Core 1.0 for Visual Studio and .NET Core Windows Server Hosting<\/h2>\n\n\n\n<p>Now we need to install .NET Core 1.0 for Visual Studio and .NET Core Windows Server Hosting, so we will be able to build and publish our website. You can get .NET Core 1.0 for Visual Studio here:&nbsp;<a href=\"https:\/\/www.microsoft.com\/net\/core#windows\" target=\"_blank\" rel=\"noreferrer noopener\">.NET Core 1.0 for Visual Studio Download<\/a>&nbsp;and .NET Core Windows Server Hosting here:&nbsp;<a href=\"https:\/\/docs.asp.net\/en\/latest\/publishing\/iis.html#install-the-net-core-windows-server-hosting-bundle\" target=\"_blank\" rel=\"noreferrer noopener\">.NET Core Windows Server Hosting Download<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"creating-a-website\">Creating a website<\/h2>\n\n\n\n<p>If we already have installed all these necessaries, we can proceed to create a new website. To do so, open Visual Studio 2015, go to&nbsp;<strong>File\/New\/Project&nbsp;<\/strong>and choose&nbsp;<strong>Visual C#\/Web\/ASP.NET Core Web Application (.NET Core)<\/strong>. Name it&nbsp;<strong>NETCoreWebsite<\/strong>&nbsp;(fig. 1).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/1.bp.blogspot.com\/-Q06vGT1GYNI\/V_9ouNwlOyI\/AAAAAAAAATQ\/s8OccKAOZf0H0I5qr0mG-_zzQ8jWvm_LQCLcB\/s320\/Marcin_pic_1.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 1 \u2013 creating template for ASP .NET Core application<\/p>\n\n\n\n<p>In the next window we need to choose type of template together with type of authentication. In our case, it will be respectively&nbsp;<strong>Web Application<\/strong>&nbsp;and&nbsp;<strong>No authentication<\/strong>.&nbsp;<strong>Host in the cloud<\/strong>&nbsp;option should be unchecked (fig. 2).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/2.bp.blogspot.com\/-ptipinjroa0\/V_-K51fBZgI\/AAAAAAAAATk\/XuVRJTVKLc83LNN3AEaCA8k2Cme1IZzhgCLcB\/s320\/Marcin_pic2.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 2 \u2013 choosing right template and type of authentication<\/p>\n\n\n\n<p>New ASP.NET Core project has been just created. Moreover, we can display it in our web browser. To do so, click on&nbsp;<strong>IIS Express<\/strong>&nbsp;button on the navigation bar. After few second default website should appear in our web browser. We can switch between all items on navigation bar.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/4.bp.blogspot.com\/-iXd1BIMRuYI\/V_-MGKRmzRI\/AAAAAAAAATs\/OkCqMx9wnMAPChC7I0b9fJa8qL_4XsfpwCLcB\/s320\/Marcin_pic3.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 3 \u2013 default website made while creating new ASP.NET Core project<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"adding-webpages-and-static-files\">Adding webpages and static files<\/h2>\n\n\n\n<p>Now we move on to create our own website. All directories and files which will be mentioned in this tutorial are placed in&nbsp;<strong>src\/NETCoreWebsite<\/strong>&nbsp;in&nbsp;<strong>Solution Explorer<\/strong>.<\/p>\n\n\n\n<p>First of all, we should remove unnecessary files. To do so, go to&nbsp;<strong>Views\/Home<\/strong>&nbsp;and delete all three webpages placed there. After that go to&nbsp;<strong>wwwroot\/images<\/strong>&nbsp;and delete all images that directory contains.<\/p>\n\n\n\n<p>Now it\u2019s time to add our webpages to project. Go to&nbsp;<strong>Views\/Home<\/strong>, right click on it and choose&nbsp;<strong>Add\/New item<\/strong>&nbsp;(fig. 4).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/1.bp.blogspot.com\/-C8S2Lkv92wI\/V_-Np--gxWI\/AAAAAAAAAT0\/dVHOsV7o7hAA-YsEuU7VTtQKM2jxnuNfgCLcB\/s320\/Marcin_pic4.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 4 \u2013 adding new webpage to project<\/p>\n\n\n\n<p>In new window choose&nbsp;<strong>.NET Core\/ASP.NET\/MVC View Page<\/strong>. Name it&nbsp;<strong>FirstWebpage.cshtml&nbsp;<\/strong>(fig. 5).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/3.bp.blogspot.com\/-eEhj4adn2So\/V_-PCBJ203I\/AAAAAAAAAT8\/J7CRXjhed2UDx4ERAR7W6A8ZOANsuQ5EwCLcB\/s320\/Marcin_pic5.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 5 \u2013 adding new webpage to project, continuation<\/p>\n\n\n\n<p>Our webpage has just been created. Repeat that step for&nbsp;<strong>SecondWebpage.cshtml<\/strong>.<\/p>\n\n\n\n<p>Now we\u2019re going to fill .cshtml files we\u2019ve created in last step with HTML code.&nbsp;<strong>IMPORTANT:&nbsp;<\/strong>those.cshtml files should contain only content of &lt;body&gt; tag&nbsp;<strong>without&nbsp;<\/strong>declaration of shared elements (like navigation bar or footer), references to CSS files, fonts and &lt;script&gt; tags. &lt;body&gt; tags shouldn\u2019t be included as well.<\/p>\n\n\n\n<p>It\u2019s time to add static files like images, CSS or JavaScript to our project. Few steps ago we deleted unnecessary images from&nbsp;<strong>wwwroot\/images<\/strong>. Now we\u2019re going to add our images right to this directory. Right click on it and choose&nbsp;<strong>Open Folder in File Explorer&nbsp;<\/strong>(fig. 6). That will open images directory in File Explorer and now all we have to do is simply copy our images here.&nbsp;<strong>NOTE:<\/strong>&nbsp;Remember to add \u201c~\/\u201d at beginning of every image path.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/3.bp.blogspot.com\/-coZms_wHrmk\/V_-PdvOsJDI\/AAAAAAAAAUA\/0Ok7hpqlKJgSIyn5FdK2UWF79oR8c03bwCLcB\/s320\/Marcin_pic6.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 6 \u2013 opening directory in File Explorer to easily add new items to it<\/p>\n\n\n\n<p>In very similar way we can add CSS and JavaScript files. We just have to add them to&nbsp;<strong>wwwroot\/css&nbsp;<\/strong>or&nbsp;<strong>wwwroot\/js<\/strong>.<\/p>\n\n\n\n<p>ASP.NET Core using MVC pattern, which means that Controllers are responsible for display our Views to end users. To display our webpages, we need to edit&nbsp;<strong>HomeController.cs&nbsp;<\/strong>placed in&nbsp;<strong>Controllers<\/strong>&nbsp;directory.<\/p>\n\n\n\n<p>In&nbsp;<strong>HomeController.cs&nbsp;<\/strong>delete methods About() and Contact(). Then copy Index() method and paste it just below original Index() method. After that change \u201cIndex\u201d to \u201cFirstWebpage\u201d in first method and to \u201cSecondWebpage\u201d in second method. Those methods only return View which allow to display our webpages in browser. After complete this step, our&nbsp;<strong>HomeController.cs<\/strong>&nbsp;class should look like this:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class HomeController : Controller {\n    public IActionResult FirstWebpage() {\n        return View();\n    }\n\n    public IActionResult SecondWebpage() {\n        return View();\n    }\n\n    public IActionResult Error() {\n        return View();\n    }\n}<\/pre>\n\n\n\n<p>Go to&nbsp;<strong>Startup.cs<\/strong>&nbsp;class and find method called Configure. In method body we will find code similar to this:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">app.UseMvc(routes=> {\n        routes.MapRoute(name: \"default\",\n            template: \"{controller=Home}\/{action=Index}\/{id?}\");\n    });<\/pre>\n\n\n\n<p>Change&nbsp;{action=Index}&nbsp;to&nbsp;{action=FirstWebpage}&nbsp;so our chosen webpage will be display by default.<\/p>\n\n\n\n<p>In next step we will add references to our CSS and JavaScript files and extract shared files.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"extracting-shared-files\">Extracting shared files<\/h2>\n\n\n\n<p>To extract shared files, we have to edit&nbsp;<strong>_Layout.cshtml<\/strong>&nbsp;file. A layout page contains the structure and shared content of website. When a web page (content page) is linked to a layout page, it will be displayed according to the layout page (template).<\/p>\n\n\n\n<p>The layout page is just like a normal web page, except from a call to the @RenderBody() method where the content page will be included.<\/p>\n\n\n\n<p>Open&nbsp;<strong>_Layout.cshtml<\/strong>. As we can see, our &lt;head&gt; tag and references to CSS and JavaScript files are defined right here.<\/p>\n\n\n\n<p>Let\u2019s start with CSS. Find environment called&nbsp;<strong>Development<\/strong>. Note that there are two environments called like this, one in &lt;head&gt; and one in &lt;body&gt;. We want to add reference to CSS file, so of course we\u2019re going to change code of &lt;head&gt;&nbsp;<strong>Development<\/strong>&nbsp;environment.<\/p>\n\n\n\n<p>In&nbsp;<strong>Development<\/strong>&nbsp;we will find&nbsp;&lt;link&nbsp;rel=&#8221;stylesheet&#8221;&nbsp;href=&#8221;~\/css\/site.css&#8221;&nbsp;\/&gt;. We want to add reference to our own CSS file, so we need to simply change&nbsp;site.css&nbsp;to name of our CSS file.<\/p>\n\n\n\n<p>We need also to add reference to font that would be used on our website. Add&nbsp;&lt;link&nbsp;rel=&#8221;stylesheet&#8221;&nbsp;href=&#8221;https:\/\/fonts.googleapis.com\/css?family=Open+Sans:400,600&#8243;&nbsp;\/&gt;&nbsp;just below CSS files reference.<\/p>\n\n\n\n<p>It\u2019s very important to copy contain of&nbsp;<strong>Development<\/strong>&nbsp;environment to&nbsp;<strong>Staging,Production<\/strong>&nbsp;environment (it can be found just below), so we will be able to use added references after publishing our project.<\/p>\n\n\n\n<p>Now we will add reference to JavaScript files.<\/p>\n\n\n\n<p>In declaration of &lt;body&gt; find environment called&nbsp;<strong>Development<\/strong>. There we will find line looks like this:<\/p>\n\n\n\n<p>&lt;<strong>script<\/strong>&nbsp;<strong>src<\/strong>=&#8221;~\/js\/site.js&#8221;&nbsp;<strong>asp-append-version<\/strong>=&#8221;true&#8221;&gt;&lt;\/<strong>script<\/strong>&gt;<\/p>\n\n\n\n<p>Just like before, all we have to do is to change&nbsp;site.js&nbsp;to name of our JavaScript file. In that case, it would be&nbsp;popups.js.<\/p>\n\n\n\n<p>Again, copy content of&nbsp;<strong>Development<\/strong>&nbsp;environment to&nbsp;<strong>Staging, Production<\/strong>&nbsp;environment.<\/p>\n\n\n\n<p>Last point of editing&nbsp;<strong>_Layout.cshtml<\/strong>&nbsp;is to define shared elements of our website. In our case, it will be navigation bar and footer, which are the same for both webpages. We just need to replace default navigation bar code with our own navigation bar code and repeat same step for footer.<\/p>\n\n\n\n<p>If it has been done, we can click&nbsp;<strong>IIS Express<\/strong>&nbsp;button and display our website in browser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"using-resources-to-localize-website\">Using resources to localize website<\/h2>\n\n\n\n<p>Using recourses is quick and easy way to localize our website. You can read more about it here:&nbsp;<a href=\"https:\/\/docs.asp.net\/en\/latest\/fundamentals\/localization.html\" target=\"_blank\" rel=\"noreferrer noopener\">Globalization and localization<\/a>.<\/p>\n\n\n\n<p>Before we add any resources, we need to implement a strategy to select the language for each request. To do so, go to&nbsp;<strong>Startup.cs<\/strong>&nbsp;and find method called&nbsp;<strong>ConfigureServices<\/strong>. Replace method body with code like below:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services.AddLocalization(options=> options.ResourcesPath=\"Resources\");\nservices.AddMvc() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddDataAnnotationsLocalization();<\/pre>\n\n\n\n<p>We added the localization services to the services container and set resources path to&nbsp;<strong>Resources<\/strong>&nbsp;(we will create that in a moment). It will also allow us to base localization on the view file suffix.<\/p>\n\n\n\n<p>We want to localize our website in three languages: English, Polish and German. Default language is English. In&nbsp;<strong>Startup.cs&nbsp;<\/strong>find method called&nbsp;<strong>Configure<\/strong>&nbsp;and add to it code like below:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var supportedCultures=new[] {\n    new CultureInfo(\"en-US\"),\n    new CultureInfo(\"pl-PL\"),\n    new CultureInfo(\"de-DE\")\n};\n\napp.UseRequestLocalization(new RequestLocalizationOptions {\n        DefaultRequestCulture=new RequestCulture(\"en-US\"),\n        SupportedCultures=supportedCultures,\n        SupportedUICultures=supportedCultures\n    });<\/pre>\n\n\n\n<p>At the very beginning of&nbsp;<strong>Startup.cs&nbsp;<\/strong>add following code:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using\u00a0System.Globalization;\nusing\u00a0Microsoft.AspNetCore.Mvc.Razor;\nusing\u00a0Microsoft.AspNetCore.Localization;<\/pre>\n\n\n\n<p>Now we will add resources to localize our website. Right click on&nbsp;<strong>src\/NETCoreWebsite<\/strong>&nbsp;in&nbsp;<strong>Solution Explorer<\/strong>&nbsp;and choose&nbsp;<strong>Add\/New Folder&nbsp;<\/strong>(fig. 7). Name it&nbsp;<strong>Resources.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/2.bp.blogspot.com\/-j-ONXu0eDaI\/V_-QL9CB53I\/AAAAAAAAAUI\/XMkmCK1yCbsn3nE3XtyZ1MF1ItAgv5baACLcB\/s320\/Marcin_pic7.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 7 \u2013 adding new directory which will contain our resource files<\/p>\n\n\n\n<p>After that, right click on&nbsp;<strong>Resources&nbsp;<\/strong>directory and choose&nbsp;<strong>Add\/New Item<\/strong>&nbsp;(fig. 8).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/2.bp.blogspot.com\/-uwKC3JqdtlA\/V_-QmG7mRYI\/AAAAAAAAAUM\/yW7Y2Fcmh-8HSuy3g8wxhSAMXDpK9U2CwCLcB\/s320\/Marcin_pic8.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>In new window choose&nbsp;<strong>.NET Core\/Code\/Resources File<\/strong>. Name it&nbsp;<strong>Views.Home.FirstWebpage.en.resx<\/strong>&nbsp;(fig. 9).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/3.bp.blogspot.com\/-xTO_CjdEbUY\/V_-Qwh5mSZI\/AAAAAAAAAUU\/Wg2Z9KyX4jwXA5hlUNsMpTj-_bd-z3_2ACLcB\/s320\/Marcin_pic9.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Figure 9 \u2013 adding new resources file<\/p>\n\n\n\n<p>Resources file for&nbsp;<strong>FirstWebpage.cshtml<\/strong>&nbsp;in English language has just been created. Repeat this step for Polish and German language (remember to change&nbsp;<strong>en<\/strong>&nbsp;to respectively&nbsp;<strong>pl&nbsp;<\/strong>and&nbsp;<strong>de<\/strong>). After that we should have 3 resources files in our&nbsp;<strong>Resources&nbsp;<\/strong>directory.<\/p>\n\n\n\n<p>Now we need to create resources files for&nbsp;<strong>SecondWebpage.cshtml<\/strong>. Repeat above step three times (for each language). Remember to change&nbsp;<strong>FirstWebpage<\/strong>&nbsp;to&nbsp;<strong>SecondWebpage<\/strong>&nbsp;in name of the resources file and to change suffixes.<\/p>\n\n\n\n<p>We need also to create resources files for&nbsp;<strong>_Layout.cshtml<\/strong>. As you could notice, name of resources file is path to proper .cshtml file plus language suffix. Because&nbsp;<strong>_Layout.cshtml<\/strong>&nbsp;isn\u2019t placed in&nbsp;<strong>Home<\/strong>&nbsp;directory, but in&nbsp;<strong>Shared<\/strong>&nbsp;directory, our resources file name for English language will be&nbsp;<strong>Views.Shared._Layout.en.resx<\/strong>. Repeat this step for Polish and German language.<\/p>\n\n\n\n<p>We can move on to localize our website. Add following code at the very beginning of&nbsp;<strong>FirstWebpage.cshtml, SecondWebpage.cshtml&nbsp;<\/strong>and&nbsp;<strong>_Layout.cshtml<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@using\u00a0Microsoft.AspNetCore.Mvc.Localization\n@inject\u00a0IViewLocalizer\u00a0Localizer<\/pre>\n\n\n\n<p>To localize any string in our code, we need to replace chosen string in .cshtml file with&nbsp;@Localizer[&#8220;String or it\u2019s ID&#8221;]. It\u2019s good practice to replace short sentences and one word strings with&nbsp;@Localizer[&#8220;String&#8221;]&nbsp;and long sentences with&nbsp;@Localizer[&#8220;ID&#8221;]. For example, if we want to localize&nbsp;<em>Contact us<\/em>, we should write&nbsp;@Localizer[&#8220;Contact us&#8221;], but if we want to localize&nbsp;<em>This tutorial will teach you building and publishing your multilanguage website on Windows using ASP .NET Core<\/em>, better write&nbsp;@Localizer[&#8220;About tutorial&#8221;].<\/p>\n\n\n\n<p>Let\u2019s assume that we used&nbsp;@Localizer[&#8220;About tutorial&#8221;]&nbsp;in our code. To translate it to other language, open proper resources file, in&nbsp;<strong>Key<\/strong>&nbsp;write&nbsp;<em>About tutorial<\/em>and in&nbsp;<strong>Value<\/strong>&nbsp;translated sentence. That\u2019s all.<\/p>\n\n\n\n<p>We can choose proper language in navigation bar of our website. To make it working, we need to code buttons like this in&nbsp;<strong>_Layout.cshtml<\/strong>:<\/p>\n\n\n\n<p><em>&nbsp; &nbsp; Create modern Web apps for any scenario with your favorite frameworks.&nbsp;<a href=\"https:\/\/www.infragistics.com\/downloads\/request\/00000000-0000-0000-0000-000000005053\" target=\"_blank\" rel=\"noreferrer noopener\">Download Ignite UI<\/a>&nbsp;today and experience the power of Infragistics JavaScript\/HTML5 controls.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/3.bp.blogspot.com\/-fBaC2AhNxYs\/V_-RKwh216I\/AAAAAAAAAUY\/kA3159DXf_QxNE0reIQpLFIRWOlU6EN6QCLcB\/s1600\/ignite-728x90-updated-logo1.jpg\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/3.bp.blogspot.com\/-fBaC2AhNxYs\/V_-RKwh216I\/AAAAAAAAAUY\/kA3159DXf_QxNE0reIQpLFIRWOlU6EN6QCLcB\/s320\/ignite-728x90-updated-logo1.jpg\" alt=\"\"\/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial we will create new multilingual website in ASP.NET Core and publish it to IIS. Version 1.0 of ASP.NET Core was released in June 2016, so it\u2019s quite new tool. Main feature of it is that we can develop and run our apps cross-platform on Windows, Linux and Mac. <\/p>\n","protected":false},"author":21,"featured_media":1219,"comment_status":"publish","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-680","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to"],"_links":{"self":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/comments?post=680"}],"version-history":[{"count":3,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/680\/revisions"}],"predecessor-version":[{"id":1992,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/680\/revisions\/1992"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media\/1219"}],"wp:attachment":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media?parent=680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/categories?post=680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/tags?post=680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}