ASP.NET מיתוג רב לשוני עם תכונות MVC מובנות ליבה

עודכן דף :
תאריך יצירת דף :

סביבה

ויז סטודיו
  • ויז סטודיו 2019
ASP.NET ליבה
  • 3.0
  • 3.1

. בהתחלה

ASP.NET להשתמש בתכונות הלוקליזציה של MVC ליבה כדי לעבור בין שפות מרובות כדי להציגם.

יצירת קובץ משאב לטקסט מתורגם

צור תיקיה לאחסון קבצי המשאבים (Resx) המנהלים את הטקסט. המיקום הוא בכל מקום, אבל להשאיר אותו ישירות מתחת למסלול. נתיב זה משפיע גם על הגדרות מאוחרות יותר.

לחץ לחיצה ימנית על הפרוייקט ובחר באפשרות הוספה או תיקיה חדשה.

image

השאר את משאבי שמות התיקיות. באפשרותך גם להגדיר שם תיקיה זה באופן שרירותי, אך באפשרותך לציין שם תיקיה זה בהגדרות מאוחרות יותר.

image

לאחר מכן, צור קובץ משאב להזנת טקסט עבור כל שפה.

לחץ לחיצה ימנית על התיקיה ' משאבים ' ובחר ' הוספה ' או ' פריט חדש '.

image

בחר את קובץ המשאבים (. resx). שם הקובץ יכול להיות שרירותי, אך עליו להיות תואם לשם שתציין במועד מאוחר יותר. . בינתיים, בוא נגיד שהוא מקור. 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. תאר את השיטה הקונשקשירותים באופן הבא:

שירותי. AddMvc (). אם קיימת שיטת הוספה לשפות נוספות, הטקסט המתורגם הן לצד התצוגה והן בצד הקונטרולר מ , אני בטוח שאוכל להשיג אותו. אבל כמו גם בשירותי האתר הרשמיים. אין בעיה בקריאה של פעולת השירות ' הוספה לוקליזציה ' ביחד.

אפשרויות. ResourcesPath מציין את הנתיב של התיקייה שבה ממוקם הקובץ Resx. אם שניהם צוינו, שירותים. AddMvc (). השיטה ' הוספה לוקליזציה ' מקבלת קדימות.

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 כסטנדרט. הקוד הבא מתאר את "מחרוזת השאילתה", "cookie" ו-"כותרת HTTP של השפה הנפתחת" בהתאם לסביבת המשתמש. באפשרותך לעבור בין שפות תצוגה באחת מהן. נראה אותך מאוחר יותר כיצד לבדוק את הפעולה בפועל.

השפה ההחלפה מוגדרת כאן במערך (תרביות תמיכה). אני ציין ja כשפת ברירת המחדל, אבל לא יצרתי את הקובץ ja הפעם. שימוש במקור. 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();

  // 省略
}

מזהה הפקד

מזהה הקובץ בפקד . כדי לקבל שפה המותאמת לשפות אחרות בצד הקונטרולר, האתר מקבל את החלק השני בבנאי. לשיתוף המשאב חייב להיות אותו שם כמו המחלקה שיצרת קודם לכן. הטקסט מועבר למייבא של המאגר המתקבל על-ידי העברת מחרוזת המפתח שהוזנה בקובץ המשאבים. ניתן לאחזר. שפת הטקסט נקבעת על בסיס התרבות המבוקשת.

, דרך אגב, בנוסף למצב החירום. יש גם מאתחל שיכול לקבל 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 . כדי להשתמש במאתחל בצד התצוגה , עליך להזריק לאחר מכן את האפשרות. אם אתה מתאר את זה כדלקמן לעכשיו, זה בסדר. בנוסף, על שיתופיות להיות בעלת שם זהה לקובץ המשאב ולמחלקה שיצרת קודם לכן.

האתר נמצא ב-Microsoft. AspNetCore. Mvc. מרחב שמות לוקליזציה, כך אני יגדיר את זה כשימוש.

אם ברצונך רק להשתמש במאתחל בנקודה מסוימת, באפשרותך לכלול את הקוד הבא בקובץ תצוגה נפרד. אם תכתוב אותו בקובץ _ViewImports. cshtml, תוכל להשתמש בו באופן אוטומטי בכל קבצי התצוגה.

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

Views\home\e.cshtml

Views\\n קובץ \ 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. הפורמט הוא ? תרבות = < קוד תרבות >. אם אתה רוצה להפריד אותו מממשק המשתמש, זה יהיה ? תרבות = < קוד תרבות > & UI-תרבות = < התרבות קוד >.

אם לא תציין דבר: אם לא צוין, השימוש ב-SharedResource. resx משמש. (למעשה, פסק דין נוסף הוחל...)

image

התבנית שצוינה עבור ? תרבות = en. שפת התצוגה היא אנגלית.

image

התבנית שצוינה עבור ? תרבות = es. שפת התצוגה היא ספרדית.

image

התבנית שצוינה עבור ? תרבות = ja. במקור, הקובץ SharedResource. ja. resx משמש. שימוש במקור. resx משמש כי הוא אינו קיים.

image

נסה לציין שפה שאינה קיימת. השימוש בקובץ SharedResource. resx מכיוון שאין כאן מסמך תואם.

image

עוגיות

קובצי cookie יכולים להחליף את שפת התצוגה. בדרך כלל מתפרסם מצד השרת, אבל הפעם אני אנסה לרשום קבצי cookie ישירות בפונקציית הדפדפן.

מכיוון שכל דפדפן אינטרנט כולל כלי פיתוח, אתה משתמש בו כדי לרשום קבצי cookie. באיור שלהלן, באפשרותך להקיש F12 ב-Edge כדי להציג את כלי הפיתוח.

השם של קובץ ה-cookie המתאים . התרבות של AspNetCore והערך המציין את השפה הוא הזן בצורה של c = < קוד התרבות > | uic = < קוד תרבות >. עבור קבצי cookie, עליך גם להזין את קוד ui. לאחר שרשמת את קובץ ה-cookie, רענן את דף דפדפן האינטרנט כדי לרענן אותו. קובץ cookie נשלח לשרת כך שהשרת יאחזר את השפה שצוינה.

באיור להלן, אתה יכול להזין c = en | uic = en כדי להציג אנגלית.

image

הקלד c = es | uic = es להציג ספרדית.

image

כותרת HTTP של שפות קבלה

כותרת ה-HTTP של הקבלה בודקת את מידע הכותרת המבוקש מדפדפן האינטרנט לשרת. זוהי היכולת להחליף שפות בהתאם.

באפשרותך לשלוח כל שליחה בשפה בהגדרות דפדפן האינטרנט, אך כברירת מחדל באפשרותך להתאים את הגדרות שפת מערכת ההפעלה. השפה הקיימת נשלחת כעת. (בין אם הוא נשלח למעשה תלוי בערכת ההפעלה ובדפדפן האינטרנט). השפה מאותחלת בדפדפן האינטרנט עבור השפה של מערכת ההפעלה, אך ייתכן שהיא נכונה.)

כך, לדוגמה, כפי שמוצג באיור שלהלן, באפשרותך לפתוח את הדף בדפדפן האינטרנט של מערכת ההפעלה של השפה האנגלית ולשלוח מידע en, כך שתוכל באופן אוטומטי שערי מקור. en. resx נבחר להציג אנגלית.

image

אם תנסה לציין שפה שאינה קיימת במחרוזת השאילתה, במקור עליך להשתמש באפשרות SharedResource. resx. הצגת שפה מוצגת באנגלית מכיוון שקיימת.

image

אם ja מצוין במחרוזת השאילתה, מחרוזת השאילתה מקבלת קדימות ומוצגת יפנית.

image

סיכום

כאן ניסיתי ליישם את המעבר הרב לשוני בדרך הקלה ביותר. כדי להחליף שפות כך שיתאימו לסביבת המשתמש, השתמש בכותרת HTTP של שימוש כשפת התצוגה המהווה ברירת מחדל. אם המשתמש בוחר בשפה כלשהי, מומלץ להוסיף קבצי cookie או להוסיף (או להזין ישירות) של מחרוזת השאילתה.