ASP.NET מיתוג רב לשוני עם תכונות MVC מובנות ליבה
סביבה
- ויז סטודיו
-
- ויז סטודיו 2019
- ASP.NET ליבה
-
- 3.0
- 3.1
. בהתחלה
ASP.NET להשתמש בתכונות הלוקליזציה של MVC ליבה כדי לעבור בין שפות מרובות כדי להציגם.
יצירת קובץ משאב לטקסט מתורגם
צור תיקיה לאחסון קבצי המשאבים (Resx) המנהלים את הטקסט. המיקום הוא בכל מקום, אבל להשאיר אותו ישירות מתחת למסלול. נתיב זה משפיע גם על הגדרות מאוחרות יותר.
לחץ לחיצה ימנית על הפרוייקט ובחר באפשרות הוספה או תיקיה חדשה.
השאר את משאבי שמות התיקיות. באפשרותך גם להגדיר שם תיקיה זה באופן שרירותי, אך באפשרותך לציין שם תיקיה זה בהגדרות מאוחרות יותר.
לאחר מכן, צור קובץ משאב להזנת טקסט עבור כל שפה.
לחץ לחיצה ימנית על התיקיה ' משאבים ' ובחר ' הוספה ' או ' פריט חדש '.
בחר את קובץ המשאבים (. resx). שם הקובץ יכול להיות שרירותי, אך עליו להיות תואם לשם שתציין במועד מאוחר יותר. . בינתיים, בוא נגיד שהוא מקור. resx
לאחר שתיצור את קובץ ה-. resx, לחץ פעמיים כדי לפתוח אותו ולאחר מכן הקלד את השם המזהה את הטקסט ואת הטקסט שברצונך להציג בפועל. קובץ SharedResource. resx הוא הקובץ שיש להשתמש בו אם השפה אינה קיימת. . נכנסתי לכאן ביפנית אם ברצונך לאפשר שפות אחרות, כגון אנגלית, להיות ברירת המחדל, הזן אותן באותה שפה.
הנה אנחנו נכנסים שלום ולהתראות כדגימות. שים לב שהוא תלוי רישיות.
המשך ליצור קבצי משאבים עבור שפות אחרות. כדי לזהות את השפה, ציין את שם הקובץ, כגון Sharedresource. ≪ קוד תרבות >. resx. ניתן לציין אחד או שניהם שילובים של ISO 639 ו-ISO 3166 עבור קוד התרבות. קוד התמיכה כפוף לשינויים מפעם לפעם, כך שהמחלקה Cultureinfo באתר Microsoft נא עיין בדף.
הפעם, en (אנגלית) ו-es (ספרדית) מוכנים. יפנית אינה זמינה מכיוון שהיא ברירת המחדל.
הזן את הטקסט המתורגם עם המקשים באותו מצב עבור כל קובץ.
לאחר מכן, יהיה לך קובץ שמגדיר רק את המחלקות. באפשרותך ליצור פעולה זו בשם זהה לקובץ המשאב שיצרת זה עתה.
למעשה, לא אכפת לי מה השם של קובץ הקוד עצמו הוא בגלל שאתה צריך רק להתאים את השם של הכיתה בפנים, אבל להשאיר אותו כך שיהיה קל להבין. זה לא משנה איפה אתה רוצה לכתוב את הקוד.
הפוך את טווח השמות לשורש הפרוייקט וצור מחלקה ריקה.
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 משמש. (למעשה, פסק דין נוסף הוחל...)
התבנית שצוינה עבור ? תרבות = en. שפת התצוגה היא אנגלית.
התבנית שצוינה עבור ? תרבות = es. שפת התצוגה היא ספרדית.
התבנית שצוינה עבור ? תרבות = ja. במקור, הקובץ SharedResource. ja. resx משמש. שימוש במקור. resx משמש כי הוא אינו קיים.
נסה לציין שפה שאינה קיימת. השימוש בקובץ SharedResource. resx מכיוון שאין כאן מסמך תואם.
עוגיות
קובצי cookie יכולים להחליף את שפת התצוגה. בדרך כלל מתפרסם מצד השרת, אבל הפעם אני אנסה לרשום קבצי cookie ישירות בפונקציית הדפדפן.
מכיוון שכל דפדפן אינטרנט כולל כלי פיתוח, אתה משתמש בו כדי לרשום קבצי cookie. באיור שלהלן, באפשרותך להקיש F12 ב-Edge כדי להציג את כלי הפיתוח.
השם של קובץ ה-cookie המתאים . התרבות של AspNetCore והערך המציין את השפה הוא הזן בצורה של c = < קוד התרבות > | uic = < קוד תרבות >. עבור קבצי cookie, עליך גם להזין את קוד ui. לאחר שרשמת את קובץ ה-cookie, רענן את דף דפדפן האינטרנט כדי לרענן אותו. קובץ cookie נשלח לשרת כך שהשרת יאחזר את השפה שצוינה.
באיור להלן, אתה יכול להזין c = en | uic = en כדי להציג אנגלית.
הקלד c = es | uic = es להציג ספרדית.
כותרת HTTP של שפות קבלה
כותרת ה-HTTP של הקבלה בודקת את מידע הכותרת המבוקש מדפדפן האינטרנט לשרת. זוהי היכולת להחליף שפות בהתאם.
באפשרותך לשלוח כל שליחה בשפה בהגדרות דפדפן האינטרנט, אך כברירת מחדל באפשרותך להתאים את הגדרות שפת מערכת ההפעלה. השפה הקיימת נשלחת כעת. (בין אם הוא נשלח למעשה תלוי בערכת ההפעלה ובדפדפן האינטרנט). השפה מאותחלת בדפדפן האינטרנט עבור השפה של מערכת ההפעלה, אך ייתכן שהיא נכונה.)
כך, לדוגמה, כפי שמוצג באיור שלהלן, באפשרותך לפתוח את הדף בדפדפן האינטרנט של מערכת ההפעלה של השפה האנגלית ולשלוח מידע en, כך שתוכל באופן אוטומטי שערי מקור. en. resx נבחר להציג אנגלית.
אם תנסה לציין שפה שאינה קיימת במחרוזת השאילתה, במקור עליך להשתמש באפשרות SharedResource. resx. הצגת שפה מוצגת באנגלית מכיוון שקיימת.
אם ja מצוין במחרוזת השאילתה, מחרוזת השאילתה מקבלת קדימות ומוצגת יפנית.
סיכום
כאן ניסיתי ליישם את המעבר הרב לשוני בדרך הקלה ביותר. כדי להחליף שפות כך שיתאימו לסביבת המשתמש, השתמש בכותרת HTTP של שימוש כשפת התצוגה המהווה ברירת מחדל. אם המשתמש בוחר בשפה כלשהי, מומלץ להוסיף קבצי cookie או להוסיף (או להזין ישירות) של מחרוזת השאילתה.