Google Code Prettify

ASP.NET Core 8 Razor pages 如何使用多國語言

在 ASP.NET Core 8 Razor Pages 中實現多國語言(國際化和本地化)通常涉及以下步驟:

設置資源文件:為不同的語言創建資源文件。
配置 ASP.NET Core 應用程序:配置中間件以支持國際化和本地化。
使用資源文件:在 Razor Pages 和其他部分使用資源文件進行翻譯。

1. 設置資源文件
首先,創建資源文件來存儲不同語言的翻譯。在項目中,您可以創建一個名為 Resources 的文件夾。

創建資源文件
Resources/Pages/Index.en.resx(英語資源文件)
Resources/Pages/Index.zh-TW.resx(繁體中文資源文件)
每個資源文件中包含鍵值對,表示需要翻譯的文本。例如:


Resources/Pages/Index.en.resx

Name Value
WelcomeWelcome to our site!
MessageHave a great day!


Resources/Pages/Index.zh-TW.resx


Name Value
Welcome 歡迎來到我們的網站!
Message 祝您有美好的一天!


2. 配置 ASP.NET Core 應用程序
在 Startup.cs 或 Program.cs 文件中配置國際化和本地化服務。

Program.cs

csharp

var builder = WebApplication.CreateBuilder(args);

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

builder.Services.Configure(options =>
{
    var supportedCultures = new[] { "en", "zh-TW" };
    options.SetDefaultCulture(supportedCultures[0]);
    options.AddSupportedCultures(supportedCultures);
    options.AddSupportedUICultures(supportedCultures);
});

builder.Services.AddRazorPages();

var app = builder.Build();

app.UseRequestLocalization();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();


3. 使用資源文件
在 Razor Pages 中使用本地化資源文件進行翻譯。

創建或修改 Razor Page
假設我們有一個 Index.cshtml 文件,我們將使用本地化資源。

Pages/Index.cshtml

csharp
@page
@model IndexModel
@inject IStringLocalizer<IndexModel> Localizer

<h2>@Localizer["Welcome"]</h2>
<p>@Localizer["Message"]</p>



Pages/Index.cshtml.cs

csharp


using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Localization;

namespace YourApp.Pages
{
    public class IndexModel : PageModel
    {
        private readonly IStringLocalizer _localizer;

        public IndexModel(IStringLocalizer localizer)
        {
            _localizer = localizer;
        }

        public void OnGet()
        {
            // You can also access localized strings in the code-behind if needed
            var welcomeMessage = _localizer["Welcome"];
        }
    }
}


4. 切換語言
可以通過查詢字符串、Cookie 或基於路徑的方式來切換語言。例如,使用查詢字符串的方式:

Pages/_Host.cshtml

csharp
@page
@namespace YourApp.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>ASP.NET Core Localization</title>
</head>
<body>
    <a href="?culture=en">English</a> |
    <a href="?culture=zh-TW">繁體中文</a>
    <div>
        @RenderBody()
    </div>
</body>
</html>



處理語言切換
需要在中間件中處理語言切換。修改 Program.cs 中的中間件配置:

csharp

app.UseRequestLocalization(options =>
{
    var supportedCultures = new[] { "en", "zh-TW" };
    options.SetDefaultCulture(supportedCultures[0]);
    options.AddSupportedCultures(supportedCultures);
    options.AddSupportedUICultures(supportedCultures);
    options.RequestCultureProviders.Insert(0, new QueryStringRequestCultureProvider());
});


這樣,當您訪問 https://yourdomain/?culture=zh-TW 時,頁面將顯示繁體中文的內容。


總結
在 ASP.NET Core 8 Razor Pages 中使用多國語言涉及以下步驟:

設置資源文件:為每種語言創建 .resx 資源文件。
配置本地化服務:在 Program.cs 中配置國際化和本地化服務。
使用本地化資源:在 Razor Pages 中使用 IStringLocalizer 來加載本地化資源。
切換語言:通過查詢字符串、Cookie 或路徑來切換語言。
這些步驟可以幫助您在 ASP.NET Core 8 應用程序中實現多國語言支持。