ASP.NET چند زبانه با هسته MVC ساخته شده در ویژگی های
محیط
- ویژوال استودیو
-
- ویژوال استودیو ۲۰۱۹
- ASP.NET هسته
-
- ۳/۰
- ۳/۱
در ابتدا
ASP.NET استفاده از ویژگی های بومی سازی MVC هسته برای تغییر بین زبان های متعدد به آنها نمایش.
ایجاد پرونده منبع برای متن ترجمه شده
ایجاد یک پوشه برای ذخیره فایل های منبع (Resx) که متن را مدیریت می کند. محل در هر نقطه است ، اما ترک آن را به طور مستقیم در زیر مسیر. این مسیر نیز تنظیمات بعدی را تحت تاثیر قرار می دهد.
روی پروژه کلیک راست کنید و افزودن یا پوشه جدید را انتخاب کنید.
منابع نام پوشه را ترک کنید. شما همچنین می توانید این نام پوشه را به صورت خودسرانه تنظیم کنید ، اما می توانید این نام پوشه را در تنظیمات بعدی مشخص کنید.
سپس یک فایل منبع برای وارد کردن متن برای هر زبان ایجاد کنید.
روی پوشه منابع کلیک راست کرده و افزودن یا مورد جدید را انتخاب کنید.
فایل منبع (. resx) را انتخاب کنید. نام پرونده می تواند خودسرانه باشد ، اما باید با نامی که بعداً مشخص کرده اید مطابقت داشته باشد. در حال حاضر ، بیایید می گویند SharedResource. resx.
پس از ایجاد فایل. resx ، دوبار کلیک کنید تا آن را باز کنید ، و سپس نامی را که متن و متن را که می خواهید در واقع نمایش داده شود ، بنویسید. فایل SharedResource. resx فایل مورد استفاده قرار گیرد اگر زبان وجود ندارد. من آن را در ژاپن وارد شده در اینجا. اگر شما می خواهید زبان های دیگر ، مانند انگلیسی ، به طور پیش فرض ، آنها را در آن زبان را وارد کنید.
در اینجا ما را وارد کنید سلام و خداحافظی به عنوان نمونه. توجه داشته باشید که حساس به حروف است
ادامه برای ایجاد فایل های منبع برای زبان های دیگر. برای شناسایی زبان ، نام پرونده مانند Sharedresource را مشخص کنید. ≪ کد فرهنگ >. resx. شما می توانید یک یا هر دو ترکیب از ISO ۶۳۹ و ISO ۳۱۶۶ برای کد فرهنگ را مشخص کنید. کد پشتیبانی منوط به تغییر از زمان به زمان است ، بنابراین کلاس فرهنگ اطلاعات در سایت مایکروسافت لطفا به صفحه مراجعه کنید.
این بار ، en (انگلیسی) و es (اسپانیایی) آماده شده است. ژاپنی در دسترس نیست زیرا پیش فرض است.
متن ترجمه شده را با کلیدهای موجود در همان حالت برای هر پرونده وارد کنید.
بعد ، شما یک فایل است که تعریف تنها کلاس داشته باشد. شما این را با همین نام به عنوان فایل منبع شما فقط ایجاد ایجاد کنید.
در واقع ، من اهمیتی نمی دهند چه نام فایل کد خود را به خاطر شما فقط باید برای مطابقت با نام کلاس در داخل ، اما ترک آن را به طوری که آن را آسان به درک است. مهم نیست که در آن شما می خواهید برای نوشتن کد.
ایجاد فضای نام ریشه پروژه و ایجاد یک کلاس خالی.
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
به هر حال ، علاوه بر 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 است در مایکروسافت. 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 استفاده شده است. (در واقع ، یکی دیگر از قضاوت اعمال شده است...)
الگوی مشخص شده برای ؟ فرهنگ = en. زبان صفحه نمایش انگلیسی است.
الگوی مشخص شده برای ؟ فرهنگ = es. زبان صفحه نمایش اسپانیایی است.
الگوی مشخص شده برای ؟ فرهنگ = ja. در اصل ، SharedResource. ja. پرونده استفاده شده است. SharedResource. resx استفاده شده است زیرا آن وجود ندارد.
برای مشخص کردن زبانی که وجود ندارد ، سعی کنید. . Resdresource استفاده شده است زیرا هیچ فایل مربوطه در اینجا وجود ندارد.
کوکی ها
کوکی ها می توانند زبان نمایش را تغییر دهند. به طور معمول از سمت سرور منتشر شده است ، اما این بار من سعی کنید به ثبت نام کوکی ها به طور مستقیم در عملکرد مرورگر.
از آنجا که هر مرورگر وب دارای یک ابزار توسعه دهنده است ، شما از آن برای ثبت نام کوکی ها استفاده می کنید. در شکل زیر ، می توانید F12 را در Edge فشار دهید تا ابزارهای توسعهدهنده را نمایش دهد.
نام کوکی مربوطه می باشد . AspNetCore. فرهنگ ، و ارزش است که زبان را مشخص می کند وارد فرم c = < کد فرهنگ > | uic = < کد فرهنگ >. برای کوکی ها ، باید کد ui را نیز وارد کنید. هنگامی که کوکی خود را ثبت کرده اید ، صفحه مرورگر وب خود را بازخوانی کنید تا آن را بازخوانی کنید. کوکی به سرور ارسال می شود تا سرور زبان مشخص شده را بازیابی کند.
در شکل زیر می توانید وارد شوید c = en | uic = en برای نمایش انگلیسی.
نوع c = es | uic = es برای نمایش زبان اسپانیایی.
سرصفحه HTTP قبول-زبان
سرصفحه HTTP پذیرش-زبان ، اطلاعات سرصفحه درخواست شده از مرورگر وب را به سرور بررسی می کند. این توانایی به تغییر زبان درآمده است.
شما می توانید هر زبان قبول را در تنظیمات مرورگر وب خود ارسال کنید ، اما به طور پیش فرض می توانید تنظیمات زبان سیستم عامل را مطابقت دهید. قبول زبان در حال حاضر ارسال می شود. (یا نه آن است که در واقع ارسال بستگی به سیستم عامل و مرورگر وب.) زبان در مرورگر وب برای زبان سیستم عامل مقداردهی اولیه است ، اما ممکن است درست باشد.)
بنابراین ، به عنوان مثال ، همانطور که در شکل زیر نشان داده شده است ، شما می توانید صفحه را در مرورگر وب از سیستم عامل انگلیسی زبان و ارسال اطلاعات en ، بنابراین شما به طور خودکار می تواند از SharedResource. en. resx برای نمایش انگلیسی انتخاب شده است.
اگر شما سعی می کنید یک زبان را مشخص کنید که در رشته پرس و جو وجود ندارد ، ابتدا باید از SharedResource استفاده کنید. resx. پذیرش زبان انگلیسی به دلیل en وجود دارد.
اگر ja در رشته پرس و جو مشخص شده باشد ، رشته پرس و جو اولویت و ژاپنی نمایش داده می شود.
خلاصه
در اینجا من سعی کردم به پیاده سازی سوئیچینگ چند زبانه در ساده ترین راه. برای تغییر زبان برای مطابقت با محیط کاربر ، از سرصفحه HTTP پذیرش-زبان به عنوان زبان نمایش پیش فرض استفاده کنید. اگر کاربر هر زبان را انتخاب کند ، ایده خوبی است برای اضافه کردن کوکی ها یا اضافه کردن (یا وارد کنید به طور مستقیم) از رشته پرس و جو.