IStringLocalizer

By suparat · 08 Oct 2025


โอเคครับ 😎 เรามาไล่ IStringLocalizer ใน ASP.NET Core ให้เข้าใจแบบละเอียด ตั้งแต่พื้นฐานจนถึงการใช้งานจริง ✅


1️⃣ IStringLocalizer คืออะไร?

  • IStringLocalizer เป็น interface ของ .NET Core สำหรับ Localization / การแปลข้อความ

  • ใช้เพื่อให้แอปสามารถรองรับหลายภาษา (multi-language) ได้ง่าย

  • ทำงานแบบ key-value: เราส่ง key → ได้ ข้อความแปลแล้ว

ข้อดี:

  • ไม่ต้อง hard-code ข้อความ

  • รองรับหลายภาษาแบบ dynamic

  • ทำงานได้ทั้ง Controller, Razor, View, Razor Page


2️⃣ การติดตั้ง

ใน Startup.cs หรือ Program.cs:

builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

// สำหรับ MVC/Razor
builder.Services.AddControllersWithViews()
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
    .AddDataAnnotationsLocalization();
  • ResourcesPath → โฟลเดอร์ที่จะเก็บไฟล์ localization


3️⃣ การสร้าง Resource File

สมมติเรามี class:

public class SharedResource
{
}
  • สร้างไฟล์ Resources/SharedResource.en.resx

    • key = Hello

    • value = Hello

  • สร้างไฟล์ Resources/SharedResource.th.resx

    • key = Hello

    • value = สวัสดี


4️⃣ การใช้ IStringLocalizer

🔹 ใน Controller

using Microsoft.Extensions.Localization;

public class HomeController : Controller
{
    private readonly IStringLocalizer<SharedResource> _localizer;

    public HomeController(IStringLocalizer<SharedResource> localizer)
    {
        _localizer = localizer;
    }

    public IActionResult Index()
    {
        // ดึงข้อความแปล
        string message = _localizer["Hello"];
        ViewBag.Message = message;
        return View();
    }
}
  • IStringLocalizer<SharedResource> → บอกว่าใช้ resource ของ SharedResource

  • _localizer["Hello"] → คืนค่า ข้อความแปลตามภาษาปัจจุบัน


🔹 ใน Razor View

@inject IStringLocalizer<SharedResource> Localizer

<h1>@Localizer["Hello"]</h1>
  • ใช้ @inject เพื่อเรียก localizer

  • ["Hello"] → คืนค่า "Hello" หรือ "สวัสดี" ขึ้นอยู่กับ Culture


5️⃣ การตั้งค่า Culture (ภาษา)

ใน Program.cs / Startup.cs:

var supportedCultures = new[] { "en", "th" };
var localizationOptions = new RequestLocalizationOptions()
    .SetDefaultCulture("en")
    .AddSupportedCultures(supportedCultures)
    .AddSupportedUICultures(supportedCultures);

app.UseRequestLocalization(localizationOptions);
  • Culture ถูกเลือกจาก:

    • query string (?culture=th)

    • cookie

    • HTTP header

ตัวอย่างเปลี่ยน culture แบบ runtime:

CultureInfo.CurrentCulture = new CultureInfo("th");
CultureInfo.CurrentUICulture = new CultureInfo("th");

6️⃣ Advanced: การใช้ Parameter

// Resource
// Key = Greeting
// Value = Hello {0}, welcome to our site!

string name = "Jen";
string message = _localizer["Greeting", name];
// message = "Hello Jen, welcome to our site!" (หรือภาษาไทยตาม resx)
  • สามารถใช้ {0}, {1} ใน resource แล้วส่ง parameter ได้


7️⃣ สรุป

สิ่งที่ทำ ความหมาย
IStringLocalizer<T> Interface สำหรับดึงข้อความแปลจาก Resource ของ T
_localizer["Key"] คืนข้อความแปลตามภาษาปัจจุบัน
Resources/SharedResource.xx.resx ไฟล์เก็บข้อความแปลตามภาษา
UseRequestLocalization ตั้งค่า supported cultures และ default culture

💡 Tip:

  • ใช้ IStringLocalizer แทน hard-code เพื่อให้รองรับหลายภาษาแบบ scalable

  • สามารถใช้กับ Controller, Razor, Razor Pages, View, DataAnnotations

  • ถ้าใช้หลายภาษา ควรสร้าง Resource file แยกตาม Class จะจัดการง่าย


ถ้าคุณอยาก ผมสามารถทำ ตัวอย่าง project ASP.NET Core แบบเต็ม ที่ใช้ IStringLocalizer ทั้ง Controller + View + Resource + เปลี่ยนภาษา runtime ให้ดูเลย

คุณอยากให้ผมทำตัวอย่างนั้นไหมครับ?

IStringLocalizer
Web hosting by Somee.com