ASP.NET چند زبانه با هسته MVC ساخته شده در ویژگی های

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط

ویژوال استودیو
  • ویژوال استودیو ۲۰۱۹
ASP.NET هسته
  • ۳/۰
  • ۳/۱

در ابتدا

ASP.NET استفاده از ویژگی های بومی سازی MVC هسته برای تغییر بین زبان های متعدد به آنها نمایش.

ایجاد پرونده منبع برای متن ترجمه شده

ایجاد یک پوشه برای ذخیره فایل های منبع (Resx) که متن را مدیریت می کند. محل در هر نقطه است ، اما ترک آن را به طور مستقیم در زیر مسیر. این مسیر نیز تنظیمات بعدی را تحت تاثیر قرار می دهد.

روی پروژه کلیک راست کنید و افزودن یا پوشه جدید را انتخاب کنید.

image

منابع نام پوشه را ترک کنید. شما همچنین می توانید این نام پوشه را به صورت خودسرانه تنظیم کنید ، اما می توانید این نام پوشه را در تنظیمات بعدی مشخص کنید.

image

سپس یک فایل منبع برای وارد کردن متن برای هر زبان ایجاد کنید.

روی پوشه منابع کلیک راست کرده و افزودن یا مورد جدید را انتخاب کنید.

image

فایل منبع (. resx) را انتخاب کنید. نام پرونده می تواند خودسرانه باشد ، اما باید با نامی که بعداً مشخص کرده اید مطابقت داشته باشد. در حال حاضر ، بیایید می گویند SharedResource. resx.

image

پس از ایجاد فایل. resx ، دوبار کلیک کنید تا آن را باز کنید ، و سپس نامی را که متن و متن را که می خواهید در واقع نمایش داده شود ، بنویسید. فایل SharedResource. resx فایل مورد استفاده قرار گیرد اگر زبان وجود ندارد. من آن را در ژاپن وارد شده در اینجا. اگر شما می خواهید زبان های دیگر ، مانند انگلیسی ، به طور پیش فرض ، آنها را در آن زبان را وارد کنید.

در اینجا ما را وارد کنید سلام و خداحافظی به عنوان نمونه. توجه داشته باشید که حساس به حروف است

image

ادامه برای ایجاد فایل های منبع برای زبان های دیگر. برای شناسایی زبان ، نام پرونده مانند Sharedresource را مشخص کنید. ≪ کد فرهنگ >. resx. شما می توانید یک یا هر دو ترکیب از ISO ۶۳۹ و ISO ۳۱۶۶ برای کد فرهنگ را مشخص کنید. کد پشتیبانی منوط به تغییر از زمان به زمان است ، بنابراین کلاس فرهنگ اطلاعات در سایت مایکروسافت لطفا به صفحه مراجعه کنید.

این بار ، en (انگلیسی) و es (اسپانیایی) آماده شده است. ژاپنی در دسترس نیست زیرا پیش فرض است.

image

متن ترجمه شده را با کلیدهای موجود در همان حالت برای هر پرونده وارد کنید.

image

image

بعد ، شما یک فایل است که تعریف تنها کلاس داشته باشد. شما این را با همین نام به عنوان فایل منبع شما فقط ایجاد ایجاد کنید.

در واقع ، من اهمیتی نمی دهند چه نام فایل کد خود را به خاطر شما فقط باید برای مطابقت با نام کلاس در داخل ، اما ترک آن را به طوری که آن را آسان به درک است. مهم نیست که در آن شما می خواهید برای نوشتن کد.

image

ایجاد فضای نام ریشه پروژه و ایجاد یک کلاس خالی.

namespace LocalizationText
{
  // クラス名は作成した .resx のファイル名と同じにする必要がある
  public class SharedResource { }
}

رفع هر برنامه

Startup.cs

رفع Startup.cs. روش ConfigureServices را به صورت زیر شرح دهید:

خدمات. AddMvc (). در صورتی که یک روش AddViewLocalization سازی وجود دارد ، متن ترجمه شده توسط هر دو طرف نمایش و سمت کنترل است من مطمئن هستم من می توانم آن را دریافت کند ، اما همانطور که در خدمات وب سایت رسمی نیز وجود دارد. هیچ مشکلی با فراخوانی روش AddLocalization با هم وجود ندارد.

گزینه. کاردانی مسیر پوشه که در آن فایل Resx قرار گرفته است را مشخص می کند. اگر هر دو مشخص ، خدمات. AddMvc (). روش محلی سازی AddViewLocalization می گیرد.

public void ConfigureServices(IServiceCollection services)
{
  services.AddControllersWithViews();

  // Resx ファイルのあるフォルダを指定する。
  // コントローラー側でしか使用しないならこちらでもよい。AddViewLocalization を使用するならこちらはなくても動作する。
  //services.AddLocalization(options => options.ResourcesPath = "Resources");

  services.AddMvc()
    // ローカライズに必要。Resx ファイルのフォルダパスを指定
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; });
}

سپس روش پیکربندی را برای Startup.cs تغییر دهید . اگر فقط می خواهید فایل منبع را بخوانید ، به آن نیاز ندارید. کدی که لازم است اجازه دهد تا کاربر یک زبان را به طور خودسرانه مشخص کند.

ما در حال استفاده از ویژگی های ساخته شده در ASP.NET هسته MVC به عنوان استاندارد. کد زیر توصیف "رشته پرس و جو", "کوکی", و "قبول-زبان هدر HTTP" بسته به محیط کاربر. شما می توانید بین زبان های نمایش در یکی از آنها تغییر دهید. ما بعدا خواهیم دید که چگونه عملیات واقعی را بررسی کنیم.

زبان تغییر در اینجا در آرایه (supportedCultures) مشخص شده است. من ja را به عنوان زبان پیش فرض مشخص کردم ، اما این بار فایل ja را ایجاد نکردم. . Resdresource استفاده شده است اگر زبان غیر از en ، es مشخص شده است.

شما می توانید رابط کاربری را از زبان هایی که پشتیبانی می کنید جدا کنید ، اما برای جدا کردن آن سود زیادی وجود ندارد. شما همان زبان را دارید.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  if (env.IsDevelopment())
  {
    // 省略
  }

  // 標準の機能で切り替えたい言語を定義します。
  var supportedCultures = new[]
  {
    new CultureInfo("ja"),
    new CultureInfo("en"),
    new CultureInfo("es"),
  };

  // 標準の言語切り替え機能を有効にします。対応しているのは「クエリ文字列」「Cookie」「Accept-Language HTTP ヘッダー」です。
  app.UseRequestLocalization(new RequestLocalizationOptions
  {
    DefaultRequestCulture = new RequestCulture("ja"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
  });

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

  // 省略
}

Controlsurcodc حسابهای

فایل های Controlsurco.erladc . برای به دست آوردن یک زبان محلی در سمت کنترل ، iStringLocalizer در سازنده دریافت می شود. SharedResource باید همین نام را به عنوان کلاس که قبلا ایجاد کرده اید داشته باشد. متن به وارد کننده از localizer دریافت شده با عبور از رشته های کلیدی وارد در فایل منبع منتقل می شود. می تواند بازیابی شود. زبان متن بر اساس فرهنگ درخواست شده تعیین می شود.

به هر حال ، علاوه بر IStringLocalizer ، همچنین یک Istringlocalizer وجود دارد که می تواند HTML را به عنوان آن دریافت کند.

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

  // DI でローカライザーを取得します。
  public HomeController(ILogger<HomeController> logger, IStringLocalizer<SharedResource> localizer)
  {
    _logger = logger;
    _localizer = localizer;
  }

  public IActionResult Index()
  {
    // ローカライザーを使用して設定されている言語のリソースファイルからテキストを取得します。
    ViewData["Message"] = _localizer["Goodbye"];

    return View();
  }

  // 省略
}

مشاهدات \ _ViewImports. cshtml

مشاهدات \ _ViewImports. cshtml فایل. برای استفاده از یک localizer در سمت مشاهده ، شما باید IHtmlLocalizer تزریق. اگر شما آن را توصیف به شرح زیر در حال حاضر ، آن را خوب است. همچنین ، SharedResource باید همان نام را به عنوان فایل منبع و کلاس شما ایجاد شده قبل از.

IHtmlLocalizer است در مایکروسافت. AspNetCore. Mvc. فضای نام محلی سازی ، بنابراین من این را به عنوان با استفاده از تعریف.

اگر فقط می خواهید از localizer در یک نقطه خاص استفاده کنید ، می توانید کد زیر را در یک فایل مشاهده جداگانه وارد کنید. اگر شما آن را در یک _ViewImports بنویسید. cshtml فایل ، شما به طور خودکار قادر به استفاده از آن را در تمام فایل های مشاهده خواهد بود.

@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer

Views\Home\Index.cshtml

فایل Views\Home\Index.cshtml . متن به دست آمده در سمت کنترل و متن به دست آمده به طور مستقیم در سمت مشاهده به ترتیب نمایش داده می شود. Localizer جانبی نمایش نیز می شود متن با مشخص کردن یک رشته کلیدی برای.

@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
  <h1 class="display-4">Welcome</h1>
  <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

@* ローカライザーから取得したテキストを表示します。 *@
<p>@Localizer["Hello"]</p>
<p>@ViewData["Message"]</p>

بررسی عملیات

رشته پرس و جو

شما می توانید زبان صفحه نمایش را با مشخص کردن یک کد فرهنگ در رشته پرس و جو URL تغییر دهید. فرمت است ؟ فرهنگ = < کد فرهنگ >. اگر می خواهید آن را از UI جدا کنید ، آن خواهد بود ؟ فرهنگ = < کد فرهنگ > & رابط کاربر-فرهنگ = < کد فرهنگ >.

اگر چیزی را مشخص نکنید: اگر مشخص نشده است ، SharedResource. resx استفاده شده است. (در واقع ، یکی دیگر از قضاوت اعمال شده است...)

image

الگوی مشخص شده برای ؟ فرهنگ = en. زبان صفحه نمایش انگلیسی است.

image

الگوی مشخص شده برای ؟ فرهنگ = es. زبان صفحه نمایش اسپانیایی است.

image

الگوی مشخص شده برای ؟ فرهنگ = ja. در اصل ، SharedResource. ja. پرونده استفاده شده است. SharedResource. resx استفاده شده است زیرا آن وجود ندارد.

image

برای مشخص کردن زبانی که وجود ندارد ، سعی کنید. . Resdresource استفاده شده است زیرا هیچ فایل مربوطه در اینجا وجود ندارد.

image

کوکی ها

کوکی ها می توانند زبان نمایش را تغییر دهند. به طور معمول از سمت سرور منتشر شده است ، اما این بار من سعی کنید به ثبت نام کوکی ها به طور مستقیم در عملکرد مرورگر.

از آنجا که هر مرورگر وب دارای یک ابزار توسعه دهنده است ، شما از آن برای ثبت نام کوکی ها استفاده می کنید. در شکل زیر ، می توانید F12 را در Edge فشار دهید تا ابزارهای توسعهدهنده را نمایش دهد.

نام کوکی مربوطه می باشد . AspNetCore. فرهنگ ، و ارزش است که زبان را مشخص می کند وارد فرم c = < کد فرهنگ > | uic = < کد فرهنگ >. برای کوکی ها ، باید کد ui را نیز وارد کنید. هنگامی که کوکی خود را ثبت کرده اید ، صفحه مرورگر وب خود را بازخوانی کنید تا آن را بازخوانی کنید. کوکی به سرور ارسال می شود تا سرور زبان مشخص شده را بازیابی کند.

در شکل زیر می توانید وارد شوید c = en | uic = en برای نمایش انگلیسی.

image

نوع c = es | uic = es برای نمایش زبان اسپانیایی.

image

سرصفحه HTTP قبول-زبان

سرصفحه HTTP پذیرش-زبان ، اطلاعات سرصفحه درخواست شده از مرورگر وب را به سرور بررسی می کند. این توانایی به تغییر زبان درآمده است.

شما می توانید هر زبان قبول را در تنظیمات مرورگر وب خود ارسال کنید ، اما به طور پیش فرض می توانید تنظیمات زبان سیستم عامل را مطابقت دهید. قبول زبان در حال حاضر ارسال می شود. (یا نه آن است که در واقع ارسال بستگی به سیستم عامل و مرورگر وب.) زبان در مرورگر وب برای زبان سیستم عامل مقداردهی اولیه است ، اما ممکن است درست باشد.)

بنابراین ، به عنوان مثال ، همانطور که در شکل زیر نشان داده شده است ، شما می توانید صفحه را در مرورگر وب از سیستم عامل انگلیسی زبان و ارسال اطلاعات en ، بنابراین شما به طور خودکار می تواند از SharedResource. en. resx برای نمایش انگلیسی انتخاب شده است.

image

اگر شما سعی می کنید یک زبان را مشخص کنید که در رشته پرس و جو وجود ندارد ، ابتدا باید از SharedResource استفاده کنید. resx. پذیرش زبان انگلیسی به دلیل en وجود دارد.

image

اگر ja در رشته پرس و جو مشخص شده باشد ، رشته پرس و جو اولویت و ژاپنی نمایش داده می شود.

image

خلاصه

در اینجا من سعی کردم به پیاده سازی سوئیچینگ چند زبانه در ساده ترین راه. برای تغییر زبان برای مطابقت با محیط کاربر ، از سرصفحه HTTP پذیرش-زبان به عنوان زبان نمایش پیش فرض استفاده کنید. اگر کاربر هر زبان را انتخاب کند ، ایده خوبی است برای اضافه کردن کوکی ها یا اضافه کردن (یا وارد کنید به طور مستقیم) از رشته پرس و جو.