ASP.NET πολυγλωσσική εναλλαγή με ενσωματωμένα χαρακτηριστικά πυρήνα MVC
Περιβάλλον
- Οπτικό Στούντιο
-
- Οπτικό Στούντιο 2019
- ASP.NET πυρήνας
-
- 3.0
- 3.1
Στην αρχή
ASP.NET χρησιμοποιήσετε βασικές δυνατότητες μετάφρασης MVC για εναλλαγή μεταξύ πολλών γλωσσών για την εμφάνισή τους.
Δημιουργία αρχείου πόρων για μεταφρασμένο κείμενο
Δημιουργήστε ένα φάκελο για να αποθηκεύσετε τα αρχεία πόρων (Resx) που διαχειρίζονται το κείμενο. Η τοποθεσία είναι οπουδήποτε, αλλά αφήστε το ακριβώς κάτω από τη διαδρομή. Αυτή η διαδρομή επηρεάζει επίσης τις μεταγενέστερες ρυθμίσεις.
Κάντε δεξί κλικ στο έργο και επιλέξτε Προσθήκη ή Νέος φάκελος.
Αφήστε τους πόρους ονόματος φακέλου. Μπορείτε επίσης να ορίσετε αυτό το όνομα φακέλου αυθαίρετα, αλλά μπορείτε να καθορίσετε αυτό το όνομα φακέλου σε μεταγενέστερες ρυθμίσεις.
Στη συνέχεια, δημιουργήστε ένα αρχείο πόρου για να εισαγάγετε κείμενο για κάθε γλώσσα.
Κάντε δεξί κλικ στο φάκελο "Πόροι" και επιλέξτε "Προσθήκη" ή "Νέο στοιχείο".
Επιλέξτε το αρχείο πόρων (.resx). Το όνομα αρχείου μπορεί να είναι αυθαίρετο, αλλά πρέπει να ταιριάζει με το όνομα που καθορίζετε αργότερα. Προς το παρόν, ας πούμε sharedresource.resx.
Αφού δημιουργήσετε το αρχείο .resx, κάντε διπλό κλικ για να το ανοίξετε και, στη συνέχεια, πληκτρολογήστε το όνομα που προσδιορίζει το κείμενο και το κείμενο που θέλετε να εμφανίσετε στην πραγματικότητα. Το αρχείο SharedResource.resx είναι το αρχείο που θα χρησιμοποιηθεί εάν η γλώσσα δεν υπάρχει. Το έβαλα στα Ιαπωνικά εδώ. Εάν θέλετε άλλες γλώσσες, όπως τα Αγγλικά, να είναι η προεπιλογή, εισαγάγετε τις σε αυτήν τη γλώσσα.
Εδώ μπαίνουμε Γεια σας και αντίο ως δείγματα. Σημειώστε ότι κάνει διάκριση πεζών-κεφαλαίων.
Συνεχίστε να δημιουργείτε αρχεία πόρων για άλλες γλώσσες. Για να προσδιορίσετε τη γλώσσα, καθορίστε το όνομα αρχείου, όπως SharedResource.<Κωδικός κουλτούρας>.resx. Μπορείτε να καθορίσετε έναν ή και τους δύο συνδυασμούς ISO 639 και ISO 3166 για τον κωδικό κουλτούρας. Ο κωδικός υποστήριξης ενδέχεται να αλλάζει κατά καιρούς, επομένως η κλάση CultureInfo στην τοποθεσία της Microsoft Ανατρέξτε στη σελίδα.
Αυτή τη φορά, en (Αγγλικά) και es (ισπανικά) προετοιμάζονται. Τα ιαπωνικά δεν είναι διαθέσιμα, επειδή είναι η προεπιλογή.
Πληκτρολογήστε το μεταφρασμένο κείμενο με τα πλήκτρα στην ίδια κατάσταση για κάθε αρχείο.
Στη συνέχεια, θα έχετε ένα αρχείο που καθορίζει μόνο τις. Μπορείτε να δημιουργήσετε αυτό με το ίδιο όνομα με το αρχείο πόρων που μόλις δημιουργήσατε.
Στην πραγματικότητα, δεν με νοιάζει ποιο είναι το όνομα του αρχείου κώδικα η ίδια είναι επειδή το μόνο που έχετε να ταιριάζει με το όνομα της κατηγορίας στο εσωτερικό, αλλά αφήστε το το ίδιο, έτσι ώστε να είναι εύκολο να καταλάβει. Δεν έχει σημασία πού θέλεις να γράψεις τον κώδικα.
Κάντε το χώρο ονομάτων τη ρίζα του έργου και δημιουργήστε μια κενή κλάση.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Επιδιόρθωση κάθε προγράμματος
Startup.cs
Φτιάξε Startup.cs. Περιγράψτε τη μέθοδο ConfigureServices ως εξής:
Υπηρεσίες. 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"; });
}
Στη συνέχεια, τροποποιήστε τη μέθοδο Configure για Startup.cs. Εάν θέλετε απλώς να διαβάσετε το αρχείο πόρων, δεν το χρειάζεστε. Κώδικας που απαιτείται για να επιτρέψει στο χρήστη να καθορίσει αυθαίρετα μια γλώσσα.
Χρησιμοποιούμε τα χαρακτηριστικά που είναι ενσωματωμένα ASP.NET Core MVC ως στάνταρ. Ο ακόλουθος κώδικας περιγράφει τη "συμβολοσειρά ερωτήματος", "cookie" και "Αποδοχή γλώσσας HTTP κεφαλίδα" ανάλογα με το περιβάλλον του χρήστη. Μπορείτε να κάνετε εναλλαγή μεταξύ των γλωσσών εμφάνισης σε μία από αυτές. Θα σας δούμε αργότερα πώς να ελέγξετε την πραγματική λειτουργία.
Η εναλλάξιμη γλώσσα καθορίζεται εδώ στον πίνακα (υποστηριζόμενες Καλλιέργειες). Καθόρισα ja ως προεπιλεγμένη γλώσσα, αλλά δεν έχω δημιουργήσει το αρχείο ja αυτή τη φορά. Το SharedResource.resx χρησιμοποιείται εάν έχει καθοριστεί μια γλώσσα διαφορετική από en, es.
Μπορείτε να διαχωρίσετε το ui από τις γλώσσες που υποστηρίζετε, αλλά δεν υπάρχει μεγάλο όφελος για το διαχωρισμό του. Έχεις την ίδια γλώσσα.
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();
// 省略
}
Ελεγκτές\Οικιακός ελεγκτής.cs
Ελεγκτές\Αρχείο HomeController.cs.
Για να λάβετε μια μεταφρασμένη γλώσσα στην πλευρά του ελεγκτή, το iStringLocalizer
Με την ευκαιρία, εκτός από 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 είναι στο χώρο ονομάτων 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
Προβολές\Αρχική\Ευρετήριο.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=<κωδικός κουλτούρας>. Εάν θέλετε να το διαχωρίσετε από το ui, θα είναι ?culture=<κώδικας κουλτούρας>&ui-culture=<κωδικός κουλτούρας>.
Εάν δεν καθορίσετε τίποτα: Εάν δεν καθοριστεί, χρησιμοποιείται το SharedResource.resx. (Στην πραγματικότητα, έχει εφαρμοστεί άλλη απόφαση...)
Το μοτίβο που καθορίζεται για το .culture=en. Η γλώσσα εμφάνισης είναι τα Αγγλικά.
Το μοτίβο που καθορίζεται για το .culture=es. Η γλώσσα εμφάνισης είναι τα Ισπανικά.
Το μοτίβο που καθορίζεται για το ?culture=ja. Αρχικά, χρησιμοποιείται το αρχείο SharedResource.ja.resx. Το SharedResource.resx χρησιμοποιείται επειδή δεν υπάρχει.
Προσπαθήστε να καθορίσετε μια γλώσσα που δεν υπάρχει. Το SharedResource.resx χρησιμοποιείται επειδή δεν υπάρχει αντίστοιχο αρχείο εδώ.
Cookies
Τα cookies μπορούν να αλλάξουν τη γλώσσα εμφάνισης. Κανονικά δημοσιεύθηκε από την πλευρά του διακομιστή, αλλά αυτή τη φορά θα προσπαθήσω να καταχωρήσετε τα cookies απευθείας στη λειτουργία του προγράμματος περιήγησης.
Επειδή κάθε πρόγραμμα περιήγησης στο Web διαθέτει ένα εργαλείο προγραμματιστή, το χρησιμοποιείτε για την καταχώρηση cookies. Στην παρακάτω εικόνα, μπορείτε να πατήσετε το πλήκτρο F12 στο Edge για να εμφανίσετε τα εργαλεία προγραμματιστή.
Το όνομα του αντίστοιχου cookie είναι . AspNetCore.Πολιτισμός και η τιμή που καθορίζει τη γλώσσα είναι Πληκτρολογήστε με τη μορφή κωδικού c=<κουλτούρας>|uic=<κωδικός κουλτούρας>. Για τα cookies, πρέπει επίσης να εισαγάγετε τον κωδικό ui. Αφού καταχωρήσετε το cookie σας, ανανεώστε τη σελίδα του προγράμματος περιήγησης web για να το ανανεώσετε. Ένα cookie αποστέλλεται στο διακομιστή, ώστε ο διακομιστής να ανακτήσει την καθορισμένη γλώσσα.
Στην παρακάτω εικόνα, μπορείτε να εισαγάγετε c=en|uic=en για να εμφανίσετε τα Αγγλικά.
πληκτρολογήστε c=es|uic=es για να εμφανίσετε τα Ισπανικά.
Κεφαλίδα HTTP γλώσσας αποδοχής
Η κεφαλίδα HTTP αποδοχής γλώσσας ελέγχει τις πληροφορίες κεφαλίδας που ζητήθηκαν από το πρόγραμμα περιήγησης Web στο διακομιστή. Είναι η δυνατότητα να αλλάζετε γλώσσες αναλόγως.
Μπορείτε να στείλετε οποιαδήποτε γλώσσα αποδοχής στις ρυθμίσεις του προγράμματος περιήγησης web, αλλά από προεπιλογή μπορείτε να αντιστοιχίσετε τις ρυθμίσεις γλώσσας λειτουργικού συστήματος. Η γλώσσα αποδοχής αποστέλλεται τώρα. (Αν δεν είναι πράγματι αποστέλλεται εξαρτάται από το λειτουργικό σύστημα και web browser.) Η γλώσσα έχει προετοιμαστεί στο πρόγραμμα περιήγησης Στο Web για τη γλώσσα του λειτουργικού συστήματος, αλλά μπορεί να είναι σωστή.)
Έτσι, για παράδειγμα, όπως φαίνεται στην παρακάτω εικόνα, μπορείτε να ανοίξετε τη σελίδα στο πρόγραμμα περιήγησης στο Web του λειτουργικού συστήματος αγγλικής γλώσσας και να στείλετε πληροφορίες en, ώστε να μπορείτε αυτόματα να Το SharedResource.en.resx είναι επιλεγμένο για την εμφάνιση της αγγλικής.
Εάν προσπαθήσετε να καθορίσετε μια γλώσσα που δεν υπάρχει στη συμβολοσειρά ερωτήματος, θα πρέπει αρχικά να χρησιμοποιήσετε το SharedResource.resx. Η γλώσσα αποδοχής εμφανίζει αγγλικά, επειδή υπάρχει το en.
Εάν το ja καθορίζεται στη συμβολοσειρά ερωτήματος, η συμβολοσειρά ερωτήματος έχει προτεραιότητα και εμφανίζεται η ιαπωνική.
Περίληψη
Εδώ προσπάθησα να εφαρμόσει την πολύγλωσση μεταγωγήμεει με τον ευκολότερο τρόπο. Για να αλλάξετε γλώσσες ώστε να ταιριάζουν με το περιβάλλον του χρήστη, χρησιμοποιήστε την κεφαλίδα HTTP αποδοχής γλώσσας ως την προεπιλεγμένη γλώσσα εμφάνισης. Εάν ο χρήστης επιλέξει οποιαδήποτε γλώσσα, είναι καλή ιδέα να προσθέσετε cookies ή να προσθέσετε (ή να εισαγάγετε απευθείας) τη συμβολοσειρά ερωτήματος.