โอเคครับ 😎 เรามาไล่ 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 ให้ดูเลย
คุณอยากให้ผมทำตัวอย่างนั้นไหมครับ?