ASP.NET التبديل متعدد اللغات مع الميزات الأساسية المدمجة MVC

تحديث الصفحة :
تاريخ إنشاء الصفحة :

البيئه

استوديو البصرية
  • استوديو البصرية 2019
ASP.NET الأساسية
  • 3.0
  • 3.1

في البداية

ASP.NET استخدام ميزات تعريب MVC الأساسية للتبديل بين لغات متعددة لعرضها.

إنشاء ملف مورد للنص المترجم

إنشاء مجلد لتخزين ملفات الموارد (Resx) التي تدير النص. الموقع في أي مكان، ولكن تركه مباشرة تحت الطريق. يؤثر هذا المسار أيضًا على الإعدادات اللاحقة.

انقر بزر الماوس الأيمن على المشروع وحدد إضافة أو مجلد جديد.

image

اترك موارد اسم المجلد. يمكنك أيضًا تعيين اسم المجلد هذا بشكل تعسفي، ولكن يمكنك تحديد اسم المجلد هذا في إعدادات لاحقة.

image

ثم قم بإنشاء ملف مورد لإدخال نص لكل لغة.

انقر بزر الماوس الأيمن على مجلد الموارد وحدد إضافة عنصر أو عنصر جديد.

image

حدد ملف المورد (.resx). يمكن أن يكون اسم الملف عشوائيًا، ولكن يجب أن يتطابق مع الاسم الذي تحدده لاحقًا. في الوقت الراهن ، دعونا نقول SharedResource.resx.

image

بعد إنشاء ملف .resx، انقر نقراً مزدوجاً لفتحه، ثم اكتب الاسم الذي يعرّف النص والنص الذي تريد عرضه بالفعل. ملف SharedResource.resx هو الملف الذي سيتم استخدامه إذا لم تكن اللغة موجودة. لقد دخلته باليابانية هنا إذا كنت تريد لغات أخرى، مثل الإنجليزية، أن تكون الافتراضي، أدخلها في تلك اللغة.

هنا ندخل مرحبا ووداعا كعينات. لاحظ أنه حساس للحالة.

image

متابعة إنشاء ملفات الموارد للغات الأخرى. لتحديد اللغة، حدد اسم الملف، مثل SharedResource.<رمز الثقافة > .resx. يمكنك تحديد مجموعة واحدة أو كلا من ISO 639 و ISO 3166 لرمز الثقافة. تخضع تعليمات برمجية الدعم للتغيير من وقت لآخر، لذلك فإن فئة CultureInfo على موقع Microsoft يرجى الرجوع إلى الصفحة.

هذه المرة، يتم إعداد en (الإنجليزية) وes (الإسبانية). اليابانية غير متوفرة لأنها الافتراضية.

image

أدخل النص المترجم مع المفاتيح في نفس الحالة لكل ملف.

image

image

بعد ذلك، سيكون لديك ملف يعرّف الفئات فقط. يمكنك إنشاء هذا بنفس اسم ملف المورد الذي أنشأته للتو.

في الواقع ، لا يهمني ما هو اسم ملف التعليمات البرمجية نفسها لأنك لا تملك سوى لمطابقة اسم الطبقة في الداخل ، ولكن ترك الأمر نفسه بحيث يكون من السهل أن نفهم. لا يهم أين تريد كتابة التعليمات البرمجية.

image

جعل مساحة الاسم جذر المشروع وإنشاء فئة فارغة.

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

إصلاح كل برنامج

Startup.cs

إصلاح Startup.cs. وصف أسلوب تكوين Services على النحو التالي:

خدمات. AddMvc(). إذا كان هناك أسلوب AddViewLocalization، النص المترجمة من قبل كل من جانب العرض وجانب وحدة التحكم هو أنا متأكد من أنني يمكن أن تحصل عليه، ولكن كما هو الحال أيضا على خدمات الموقع الرسمي. لا توجد مشكلة في استدعاء أسلوب AddLocalization معاً.

خيارات. يحدد ResourcesPath مسار المجلد حيث يقع ملف 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 Core MVC كمعيار. تصف التعليمات البرمجية التالية "سلسلة الاستعلام" و "ملف تعريف الارتباط" و "قبول اللغة HTTP رأس" اعتماداً على بيئة المستخدم. يمكنك التبديل بين لغات العرض في واحدة منها. سوف نراكم لاحقاً كيفية التحقق من العملية الفعلية.

يتم تحديد اللغة القابلة للتبديل هنا في الصفيف (الثقافات المعتمدة). لقد حددت ja كلغة افتراضية، لكنني لم أقم بإنشاء ملف ja هذه المرة. يتم استخدام SharedResource.resx إذا تم تحديد لغة أخرى غير 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();

  // 省略
}

وحدات التحكم\HomeController.cs

وحدات تحكم \HomeController.cs الملف. للحصول على لغة مترجمة على جانب وحدة التحكم، يتم تلقي iStringLocalizer في المنشئ. يجب أن يكون لـ SharedResource نفس اسم الفئة التي قمت بإنشائها في وقت سابق. يتم تمرير النص إلى مستورد المترجمة المستلمة عن طريق تمرير سلسلة المفاتيح التي تم إدخالها في ملف المورد. يمكن استردادها. يتم تحديد لغة النص استنادًا إلى الثقافة المطلوبة.

بالمناسبة ، بالإضافة إلى IStringLocalizer ، هناك أيضًا IHtmlLocalizer يمكنه الحصول على 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 الملف. لاستخدام مترجم على جانب العرض، يجب حقن IHtmlLocalizer. إذا كنت تصف على النحو التالي في الوقت الراهن، فلا بأس. أيضاً، يجب أن يكون SharedResource نفس اسم ملف المورد والفئة التي قمت بإنشائها في وقت سابق.

IHtmlLocalizer في مساحة الاسم Microsoft.AspNetCore.Mvc.Localization ، لذلك سوف تعريف هذا على أنه باستخدام.

إذا كنت ترغب فقط في استخدام المترجمعند نقطة معينة، يمكنك تضمين التعليمات البرمجية التالية في ملف عرض منفصل. إذا قمت بكتابته في ملف _ViewImports.cshtml، سوف تكون تلقائياً قادراً على استخدامه في جميع ملفات العرض.

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

طرق العرض\الصفحة الرئيسية\Index.cshtml

طرق العرض\الصفحة الرئيسية\Index.cshtml الملف. يتم عرض النص الذي تم الحصول عليه على جانب وحدة التحكم والنص الذي تم الحصول عليه مباشرة على جانب العرض على التوالي. كما يحصل المترجم من جانب العرض على النص عن طريق تحديد سلسلة مفاتيح للمفهرس.

@{
    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. التنسيق هو ?culture=<ثقافة رمز > . إذا كنت ترغب في فصله عن واجهة المستخدم ، سيكون ?culture =<ثقافة رمز > واجهة المستخدم والثقافة =<ثقافة رمز > .

إذا لم تحدد أي شيء: إذا لم يتم تحديد، يتم استخدام SharedResource.resx. (في الواقع، تم تطبيق حكم آخر...)

image

النمط المحدد لـ ?culture=en. لغة العرض هي الإنجليزية.

image

النمط المحدد لـ ?culture=es. لغة العرض هي الإسبانية.

image

النمط المحدد لـ ?culture=ja. في الأصل، يتم استخدام ملف SharedResource.ja.resx. يتم استخدام SharedResource.resx لأنه غير موجود.

image

حاول تحديد لغة غير موجودة. يتم استخدام SharedResource.resx بسبب عدم وجود ملف مطابق هنا.

image

ملفات تعريف الارتباط

يمكن لملفات تعريف الارتباط تبديل لغة العرض. نشرت عادة من جانب الخادم ، ولكن هذه المرة سأحاول تسجيل ملفات تعريف الارتباط مباشرة في وظيفة المتصفح.

نظرًا لأن كل مستعرض ويب يحتوي على أداة مطور، فإنك تستخدمه لتسجيل ملفات تعريف الارتباط. في الشكل أدناه، يمكنك الضغط على F12 على الحافة لعرض أدوات المطور.

اسم ملف تعريف الارتباط المقابل هو . AspNetCore.Culture، والقيمة التي تحدد اللغة هي أدخل في شكل c =<ثقافة التعليمات البرمجية >|uic=<ثقافة الكود > بالنسبة لملفات تعريف الارتباط، يجب عليك أيضًا إدخال رمز واجهة المستخدم. بمجرد تسجيل ملف تعريف الارتباط الخاص بك، قم بتحديث صفحة متصفح الويب الخاص بك لتحديثها. يتم إرسال ملف تعريف ارتباط إلى الخادم بحيث يقوم الخادم باسترداد اللغة المحددة.

في الشكل أدناه، يمكنك إدخال c=en|uic=en لعرض اللغة الإنجليزية.

image

اكتب c=es|uic=es لعرض الإسبانية.

image

قبول اللغة HTTP رأس

يتحقق رأس HTTP قبول اللغة معلومات الرأس المطلوبة من مستعرض ويب إلى الملقم. هو القدرة على تبديل اللغات وفقا لذلك.

يمكنك إرسال أي لغة مقبولة في إعدادات مستعرض ويب، ولكن بشكل افتراضي يمكنك مطابقة إعدادات لغة نظام التشغيل. يتم الآن إرسال قبول اللغة. (أم لا يتم إرسالها في الواقع يعتمد على نظام التشغيل ومتصفح الويب.) يتم تهيئة اللغة في مستعرض ويب للغة نظام التشغيل، ولكن قد يكون صحيحاً.)

لذلك ، على سبيل المثال ، كما هو موضح في الشكل أدناه ، يمكنك فتح الصفحة في متصفح الويب لنظام التشغيل باللغة الإنجليزية وإرسال معلومات ، حتى تتمكن من تلقائيًا يتم تحديد SharedResource.en.resx لعرض اللغة الإنجليزية.

image

إذا حاولت تحديد لغة غير موجودة في سلسلة الاستعلام، يجب عليك في الأصل استخدام SharedResource.resx. قبول اللغة يعرض اللغة الإنجليزية لوجود en.

image

إذا تم تحديد ja في سلسلة الاستعلام، فإن سلسلة الاستعلام لها الأسبقية ويتم عرض اليابانية.

image

موجز

هنا حاولت تنفيذ التبديل متعدد اللغات في أسهل طريقة. لتبديل اللغات لمطابقة بيئة المستخدم، استخدم رأس HTTP قبول اللغة كلغة العرض الافتراضية. إذا اختار المستخدم أي لغة، فمن المستحسن إضافة ملفات تعريف الارتباط أو إضافة (أو إدخال مباشرة) من سلسلة الاستعلام.