{"id":488,"date":"2015-11-20T21:54:30","date_gmt":"2015-11-20T19:54:30","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=488"},"modified":"2015-11-20T21:54:30","modified_gmt":"2015-11-20T19:54:30","slug":"asp-net-web-apida-accept-language-ile-localization","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/asp-net-web-apida-accept-language-ile-localization\/","title":{"rendered":"Asp.Net Web API\u2019da Accept-Language ile Localization"},"content":{"rendered":"<p>Merhaba arkada\u015flar.<\/p>\n<p>Yine bir Web API makalesi\u00a0ile buraday\u0131m. Bir s\u00fcredir ocak ay\u0131 i\u00e7erisinde \u00e7\u0131kacak olan Web API kitabi \u00fczerinde\u00a0yo\u011fun olarak \u00e7al\u0131\u015fmaktay\u0131z. Bu s\u00fcre zarf\u0131nda blo\u011fumuda bo\u015f b\u0131rakmamak ad\u0131na, Web API i\u00e7erisinde Localization i\u015flemleri ad\u0131na\u00a0bir makale yay\u0131nlamak istedim. Haydi bir bakal\u0131m nas\u0131l oluyormu\u015f?<\/p>\n<p>Asp.NET Web API&#8217;da client\u2019\u0131n <strong>Accept-Language<\/strong> header bilgisini kullanarak, server\u2019a g\u00f6ndermi\u015f oldu\u011fu language parametrelerini Asp.Net Web API i\u00e7erisinde nas\u0131l handle edebilece\u011fimizi bir \u00f6rnek \u00fczerinden inceleyece\u011fiz.<\/p>\n<p>\u00d6ncelikle \u00f6rne\u011fimizde kullanaca\u011f\u0131m\u0131z <strong>Customer<\/strong> model\u2019ini tan\u0131mlayal\u0131m:<\/p>\n<pre class=\"lang:c# decode:true \">namespace WebAPILocalization.Models\r\n{\r\n    public class Customer\r\n    {\r\n        public string Name { get; set; }\r\n        public string Email { get; set; }\r\n    }\r\n}\r\n<\/pre>\n<p>Customer model\u2019ini olu\u015fturduktan sonra, \u00f6rne\u011fimiz i\u00e7in olan statik dil verilerini tutabilmek i\u00e7in solution \u00fczerine <strong>App_GlobalResources<\/strong> isimli Asp.Net Folder\u2019\u0131n\u0131 ekleyece\u011fiz ve i\u00e7erisine iki adet \u201cWebApiResource.resx\u201d ve \u201cWebAPIResource.en-US.resx\u201d isimli resource item\u2019lar\u0131n\u0131 tan\u0131ml\u0131yor olaca\u011f\u0131z. \u0130lk olarak bizim i\u00e7in default resource bilgisi olarak kabul edece\u011fimiz T\u00fcrk\u00e7e i\u00e7eriklerin yer alaca\u011f\u0131 \u201cWebAPIResource.resx\u201d isimli resource dosyas\u0131n\u0131 ekleyelim ve i\u00e7eri\u011fini a\u015fa\u011f\u0131daki \u015fekildeki gibi girelim:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/11\/webapiresource.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-489 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/11\/webapiresource.jpg\" alt=\"webapiresource\" width=\"673\" height=\"167\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/webapiresource.jpg 673w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/webapiresource-300x74.jpg 300w\" data-sizes=\"(max-width: 673px) 100vw, 673px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 673px; --smush-placeholder-aspect-ratio: 673\/167;\" \/><\/a><\/p>\n<p>\u015eimdi \u0130ngilizce i\u00e7eriklerin yer alaca\u011f\u0131 \u201cWebAPIResource.en-US.resx\u201d isimli resource dosyas\u0131n\u0131 ekleyelim ve bununda i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi girelim:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/11\/webapiresource-enUS.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-490 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/11\/webapiresource-enUS.jpg\" alt=\"webapiresource-enUS\" width=\"672\" height=\"159\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/webapiresource-enUS.jpg 672w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/webapiresource-enUS-300x71.jpg 300w\" data-sizes=\"(max-width: 672px) 100vw, 672px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 672px; --smush-placeholder-aspect-ratio: 672\/159;\" \/><\/a><\/p>\n<p>Statik dilleri tuttu\u011fumuz resource dosyalar\u0131n\u0131 olu\u015fturduktan sonra a\u015fa\u011f\u0131daki gibi bir solution yap\u0131s\u0131 olacakt\u0131r.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/11\/solution.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-491 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/11\/solution.jpg\" alt=\"solution\" width=\"312\" height=\"355\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/solution.jpg 312w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/solution-264x300.jpg 264w\" data-sizes=\"(max-width: 312px) 100vw, 312px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 312px; --smush-placeholder-aspect-ratio: 312\/355;\" \/><\/a><\/p>\n<p>Resource\u2019lar\u0131 tamamlad\u0131ktan sonra \u015fimdi client \u00fczerinden gelecek olan Accept-Language header bilgisini al\u0131p, API taraf\u0131nda o dil bilgisi destekleniyor ise, culture bilgisini o dil bilgisine g\u00f6re g\u00fcncelleyece\u011fiz. Bu sayede statik resource\u2019lar g\u00fcncellenen culture bilgisine g\u00f6re geriye de\u011fer d\u00f6neceklerdir.<\/p>\n<p>Culture bilgisini handle edebilmek i\u00e7in ise yeni bir MessageHandler olu\u015fturaca\u011f\u0131z. Olu\u015fturacak oldu\u011fumuz handler\u2019\u0131 <strong>System.Net.Http.DelegatingHandler<\/strong>\u2019dan t\u00fcretece\u011fiz ve <strong>SendAsync<\/strong> method\u2019unu override ederek, request \u00fczerinde g\u00f6nderilen Accept-Language bilgilerine ula\u015faca\u011f\u0131z. Dilerseniz \u015fimdi <strong>LocalizationMessageHandler<\/strong> isminde bir handler olu\u015ftural\u0131m:<\/p>\n<pre class=\"lang:c# decode:true \">using System.Collections.Generic;\r\nusing System.Net.Http;\r\nusing System.Globalization;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace WebAPILocalization.Handlers\r\n{\r\n    public class LocalizationMessageHandler : DelegatingHandler\r\n    {\r\n        private readonly List&lt;string&gt; _supportedLanguages = new List&lt;string&gt;() { \"tr-TR\", \"en-US\" };\r\n\r\n        protected override async Task&lt;HttpResponseMessage&gt; SendAsync(\r\n            HttpRequestMessage request, CancellationToken cancellationToken)\r\n        {\r\n            SetCulture(request);\r\n\r\n            var response = await base.SendAsync(request, cancellationToken);\r\n            return response;\r\n        }\r\n\r\n        #region Private Methods\r\n        private void SetCulture(HttpRequestMessage request)\r\n        {\r\n            foreach (var loopLanguage in request.Headers.AcceptLanguage)\r\n            {\r\n                \/\/ Destekledi\u011fimiz dillerden biri var ise culture bilgisini o dile g\u00f6re g\u00fcncelliyoruz.\r\n                if (_supportedLanguages.Contains(loopLanguage.Value))\r\n                {\r\n                    Thread.CurrentThread.CurrentCulture = new CultureInfo(loopLanguage.Value);\r\n                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(loopLanguage.Value);\r\n\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        #endregion\r\n    }\r\n}\r\n<\/pre>\n<p>Kod blo\u011funda g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi SendAsync method\u2019unu override edip, i\u00e7erisinden private olarak olu\u015fturmu\u015f oldu\u011fumuz <strong>SetCulture<\/strong> method\u2019unu \u00e7a\u011f\u0131r\u0131yoruz ve tekrardan base\u2019deki <strong>SendAsync<\/strong> method\u2019unu \u00e7a\u011f\u0131rarak request\u2019i inner handler\u2019a aktar\u0131yoruz . SetCulture method\u2019u i\u00e7erisinde ise request\u2019in headers k\u0131sm\u0131nda g\u00f6nderilen <strong>Accept Language<\/strong> listesi \u00fczerinde bir iterate i\u015flemi yaparak, s\u0131ras\u0131yla gelen dil bilgisini private olarak yukar\u0131da tan\u0131mlam\u0131\u015f oldu\u011fumuz <strong>\u201c<\/strong>supportedLanguages\u201d listesi \u00fczerinden kontrol ederek, e\u011fer gelen dil bilgisi \u201csupportedLanguages\u201d listesi i\u00e7erisinde var ise, culture bilgisini bu dil bilgisine g\u00f6re g\u00fcncelliyoruz ve iterate i\u015flemine son veriyoruz.<\/p>\n<p>Bir \u00f6nceki b\u00f6l\u00fcm olan \u201cAccept-Language Header\u2019\u0131 Anlamak\u201d k\u0131sm\u0131nda bahsetti\u011fimiz gibi client birden fazla dil bilgisi parametresi g\u00f6nderebilmekteydi. Burada yapm\u0131\u015f oldu\u011fumuz i\u015flem ise, client\u2019\u0131n istedi\u011fi ilk dil bilgisine g\u00f6re geriye response d\u00f6nebilmektir.<\/p>\n<p>\u015eimdi olu\u015fturmu\u015f oldu\u011fumuz LocalizationMessageHandler\u2019\u0131n pipeline i\u00e7erisinde devreye girebilmesi i\u00e7in WebApiConfig i\u00e7erisinde MessageHandlers listesine eklememiz gerekmektedir.<\/p>\n<pre class=\"lang:c# decode:true\">public static class WebApiConfig\r\n{\r\n    public static void Register(HttpConfiguration config)\r\n    {\r\n        config.MessageHandlers.Add(new LocalizationMessageHandler());\r\n    }\r\n}\r\n<\/pre>\n<p>LocalizationMessageHandler\u2019\u0131 pipeline\u2019a register ettikten sonra, \u00f6rne\u011fimizi deneyebilmek i\u00e7in CustomerController\u2019\u0131 a\u015fa\u011f\u0131daki gibi olu\u015ftural\u0131m:<\/p>\n<pre class=\"lang:c# decode:true \">public class CustomerController : ApiController\r\n{\r\n    public Customer Get()\r\n    {\r\n        return new Customer()\r\n        {\r\n            Name = Resources.WebAPIResource.NameField,\r\n            Email = Resources.WebAPIResource.EmailField\r\n        };\r\n    }\r\n}\r\n<\/pre>\n<p>Controller\u2019\u0131da haz\u0131rlad\u0131k ve \u015fimdi Fiddler \u00fczerinden test i\u015flemine ba\u015flayabiliriz. Fiddler \u00fczerinden g\u00f6nderece\u011fimiz Accept-Language header bilgisine g\u00f6re controller \u00fczerinden Customer objesinin Name ve Email alanlar\u0131n\u0131n istenilen dil baz\u0131nda resource \u00fczerinden gelmesini beklemekteyiz.<\/p>\n<p>Fiddler \u00fczerinden API\u2019nin <strong>Get<\/strong> method\u2019unu <strong>Accept-Language<\/strong> header bilgisini \u201ctr-TR\u201d \u015feklinde girerek a\u015fa\u011f\u0131daki gibi \u00e7a\u011f\u0131raca\u011f\u0131z:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/11\/accept-language.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-492 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/11\/accept-language.jpg\" alt=\"accept-language\" width=\"708\" height=\"361\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/accept-language.jpg 708w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/accept-language-300x153.jpg 300w\" data-sizes=\"(max-width: 708px) 100vw, 708px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 708px; --smush-placeholder-aspect-ratio: 708\/361;\" \/><\/a><\/p>\n<p>API\u2019nin Get method\u2019unu Fiddler \u00fczerinden execute etmeden \u00f6nce LocalizationMessageHandler\u2019\u0131n SetCulture method\u2019una breakpoint koyup sonras\u0131nda ise execute etti\u011fimizde hen\u00fcz request, controller\u2019a iletmeden \u00f6nce LocalizationMessageHandler\u2019\u0131n SetCulture method\u2019unun devreye girdi\u011fini ve <strong>AcceptLanguage<\/strong> property\u2019sininde \u201c<strong>tr-TR<\/strong>\u201d olarak set edildi\u011fini a\u015fa\u011f\u0131daki ekranda g\u00f6rebiliriz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/11\/message-handler.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-493 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/11\/message-handler.jpg\" alt=\"message-handler\" width=\"745\" height=\"528\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/message-handler.jpg 745w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/11\/message-handler-300x213.jpg 300w\" data-sizes=\"(max-width: 745px) 100vw, 745px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 745px; --smush-placeholder-aspect-ratio: 745\/528;\" \/><\/a><\/p>\n<p>Request, LocalizationMessageHandler\u2019dan \u00e7\u0131kt\u0131ktan sonra CustomerController\u2019a gelip, Get method\u2019una d\u00fc\u015fmektedir. \u00a0LocalizationMessageHandler i\u00e7erisinde kullan\u0131c\u0131n\u0131n g\u00f6ndermi\u015f oldu\u011fu Accept-Language bilgisine g\u00f6re Thread \u00fczerindeki <strong>Culture<\/strong> bilgisini g\u00fcncelledi\u011fimiz i\u00e7in, CustomerController\u2019\u0131n Get method\u2019u i\u00e7erisindeki Resource\u2019lar de\u011ferlerini getirirken, istenilen culture bilgisine g\u00f6re getirmektedirler ve a\u015fa\u011f\u0131daki gibi bir response olu\u015fmaktad\u0131r:<\/p>\n<pre class=\"lang:js decode:true \">HTTP\/1.1 200 OK\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nContent-Type: application\/json; charset=utf-8\r\nExpires: -1\r\nServer: Microsoft-IIS\/10.0\r\nX-AspNet-Version: 4.0.30319\r\nX-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcZ8O2a2FscFxkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDE1XFByb2plY3RzXFdlYkFQSUxvY2FsaXphdGlvblxXZWJBUElMb2NhbGl6YXRpb25cYXBpXGN1c3RvbWVyXA==?=\r\nX-Powered-By: ASP.NET\r\nDate: Thu, 19 Nov 2015 20:48:34 GMT\r\nContent-Length: 87\r\n\r\n{\"Name\":\"Bu bir isim alan\u0131d\u0131r. (tr-TR)\",\"Email\":\"Bu bir e-posta alan\u0131d\u0131r. (tr-TR)\"}\r\n<\/pre>\n<p>Client Accept-Language bilgisinde \u201ctr-TR\u201d yerine \u201c<strong>en-US<\/strong>\u201d olarak bir header bilgisi g\u00f6nderirse e\u011fer, response a\u015fa\u011f\u0131daki gibi olu\u015facakt\u0131r:<\/p>\n<pre class=\"lang:js decode:true \">HTTP\/1.1 200 OK\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nContent-Type: application\/json; charset=utf-8\r\nExpires: -1\r\nServer: Microsoft-IIS\/10.0\r\nX-AspNet-Version: 4.0.30319\r\nX-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcZ8O2a2FscFxkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDE1XFByb2plY3RzXFdlYkFQSUxvY2FsaXphdGlvblxXZWJBUElMb2NhbGl6YXRpb25cYXBpXGN1c3RvbWVyXA==?=\r\nX-Powered-By: ASP.NET\r\nDate: Thu, 19 Nov 2015 21:05:29 GMT\r\nContent-Length: 81\r\n\r\n{\"Name\":\"This is a name field. (en-US)\",\"Email\":\"This is a email field. (en-US)\"}\r\n<\/pre>\n<p>JSON result\u2019lara bakt\u0131\u011f\u0131m\u0131zda ise gelen verinin client\u2019\u0131n istemi\u015f oldu\u011fu dil bilgisi do\u011frultusunda geldi\u011fini g\u00f6rebilmekteyiz. Umar\u0131m faydal\u0131 bir makale olmu\u015ftur. Bu konunun\u00a0devam\u0131na ve daha detayl\u0131 incelemesine, \u00e7\u0131kacak olan Web API kitab\u0131m\u0131z \u00fczerinden eri\u015febiliyor olacaks\u0131n\u0131z. :)<\/p>\n<p>Uygulamaya a\u015fa\u011f\u0131dan ula\u015fabilirsiniz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/11\/WebAPILocalization.rar\">WebAPILocalization<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar. Yine bir Web API makalesi\u00a0ile buraday\u0131m. Bir s\u00fcredir ocak ay\u0131 i\u00e7erisinde \u00e7\u0131kacak olan Web API kitabi \u00fczerinde\u00a0yo\u011fun olarak \u00e7al\u0131\u015fmaktay\u0131z. Bu s\u00fcre zarf\u0131nda blo\u011fumuda bo\u015f b\u0131rakmamak ad\u0131na, Web API i\u00e7erisinde Localization i\u015flemleri ad\u0131na\u00a0bir makale yay\u0131nlamak istedim. Haydi bir bakal\u0131m nas\u0131l oluyormu\u015f? Asp.NET Web API&#8217;da&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/asp-net-web-apida-accept-language-ile-localization\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Asp.Net Web API\u2019da Accept-Language ile Localization<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[141,144,142,143],"class_list":["post-488","post","type-post","status-publish","format-standard","hentry","category-asp-net-web-api","tag-asp-net-web-api","tag-asp-net-web-api-message-handler","tag-web-api-localization","tag-web-api-multi-language","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Asp.Net Web API\u2019da Accept-Language ile Localization - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Asp.Net Web API\u2019da Accept-Language ile Localization - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-20T19:54:30+00:00\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Asp.Net Web API\u2019da Accept-Language ile Localization\",\"datePublished\":\"2015-11-20T19:54:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/\"},\"wordCount\":801,\"commentCount\":6,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"keywords\":[\"Asp.Net Web API\",\"Asp.net Web Api Message Handler\",\"Web Api Localization\",\"Web Api Multi Language\"],\"articleSection\":[\"Asp.Net Web API\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/\",\"name\":\"Asp.Net Web API\u2019da Accept-Language ile Localization - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"datePublished\":\"2015-11-20T19:54:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-web-apida-accept-language-ile-localization\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Asp.Net Web API\u2019da Accept-Language ile Localization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Asp.Net Web API\u2019da Accept-Language ile Localization - G\u00f6khan G\u00f6kalp","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:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/","og_locale":"tr_TR","og_type":"article","og_title":"Asp.Net Web API\u2019da Accept-Language ile Localization - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2015-11-20T19:54:30+00:00","author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"5 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Asp.Net Web API\u2019da Accept-Language ile Localization","datePublished":"2015-11-20T19:54:30+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/"},"wordCount":801,"commentCount":6,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"keywords":["Asp.Net Web API","Asp.net Web Api Message Handler","Web Api Localization","Web Api Multi Language"],"articleSection":["Asp.Net Web API"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/","url":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/","name":"Asp.Net Web API\u2019da Accept-Language ile Localization - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"datePublished":"2015-11-20T19:54:30+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/asp-net-web-apida-accept-language-ile-localization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Asp.Net Web API\u2019da Accept-Language ile Localization"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=488"}],"version-history":[{"count":2,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/488\/revisions"}],"predecessor-version":[{"id":496,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/488\/revisions\/496"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}