ASP.NET conmutación multilingüe con características principales integradas de MVC
Ambiente
- Visual Studio
-
- Visual Studio 2019
- Núcleo ASP.NET
-
- 3.0
- 3.1
Al principio
ASP.NET usar las características principales de localización de MVC para cambiar entre varios idiomas para mostrarlos.
Crear un archivo de recursos para el texto traducido
Cree una carpeta para almacenar los archivos de recursos (Resx) que administran el texto. La ubicación está en cualquier lugar, pero déjelo directamente debajo de la ruta. Esta ruta también afecta a la configuración posterior.
Haga clic con el botón derecho en el proyecto y seleccione Agregar o Nueva carpeta.
Deje los recursos de nombre de carpeta. También puede establecer este nombre de carpeta arbitrariamente, pero puede especificar este nombre de carpeta en la configuración posterior.
A continuación, cree un archivo de recursos para escribir texto para cada idioma.
Haga clic con el botón derecho en la carpeta Recursos y seleccione Agregar o Nuevo elemento.
Seleccione el archivo de recursos (.resx). El nombre de archivo puede ser arbitrario, pero debe coincidir con el nombre que especifique más adelante. Por ahora, digamos SharedResource.resx.
Después de crear el archivo .resx, haga doble clic para abrirlo y, a continuación, escriba el nombre que identifica el texto y el texto que desea mostrar realmente. El archivo SharedResource.resx es el archivo que se usará si el idioma no existe. Lo entré en japonés aquí. Si desea que otros idiomas, como el inglés, sean el valor predeterminado, introdúzcalos en ese idioma.
Aquí ingresamos Hello y Goodbye como muestras. Tenga en cuenta que distingue mayúsculas de minúsculas.
Continúe creando archivos de recursos para otros idiomas. Para identificar el idioma, especifique el nombre del archivo, como SharedResource.<Culture Code>.resx. Puede especificar una o ambas combinaciones de ISO 639 e ISO 3166 para el código de referencia cultural. El código de soporte técnico está sujeto a cambios de vez en cuando, por lo que la clase CultureInfo en el sitio de Microsoft Consulte la página.
Esta vez, se preparan en (inglés) y es (español). Japonés no está disponible porque es el valor predeterminado.
Introduzca el texto traducido con las claves en el mismo estado para cada archivo.
A continuación, tendrá un archivo que define solo las clases. Esto se crea con el mismo nombre que el archivo de recursos que acaba de crear.
De hecho, no me importa cuál sea el nombre del archivo de código en sí porque sólo tienes que coincidir con el nombre de la clase dentro, pero dejarlo igual para que sea fácil de entender. No importa dónde quieras escribir el código.
Haga que el espacio de nombres sea la raíz del proyecto y cree una clase vacía.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Arreglar cada programa
Startup.cs
Arregla Startup.cs. Describir el método ConfigureServices de la siguiente manera:
Servicios. AddMvc(). Si hay un método AddViewLocalization, el texto traducido por el lado de la vista y el lado del controlador es Estoy seguro de que puedo conseguirlo, pero Como también está en los servicios oficiales del sitio web. No hay ningún problema con llamar al método AddLocalization juntos.
Opciones. ResourcesPath especifica la ruta de acceso de la carpeta donde se encuentra el archivo Resx. Si se especifican ambos, los servicios. AddMvc(). El AddViewLocalization método tiene prioridad.
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"; });
}
A continuación, modifique el método Configure para Startup.cs. Si solo desea leer el archivo de recursos, no lo necesita. Código necesario para permitir al usuario especificar un idioma arbitrariamente.
Estamos usando las características integradas en ASP.NET Core MVC como estándar. El código siguiente describe la "cadena de consulta", "cookie" y "Aceptar encabezado HTTP de idioma" dependiendo del entorno del usuario. Puede cambiar entre los idiomas de visualización en uno de ellos. Más adelante te veremos cómo comprobar la operación real.
El lenguaje conmutable se especifica aquí en la matriz (supportedCultures). He especificado ja como el idioma predeterminado, pero no he creado el archivo ja esta vez. SharedResource.resx se utiliza si se especifica un idioma distinto de en, es.
Puede separar la interfaz de usuario de los idiomas que admite, pero no hay mucha ventaja en separarla. Tienes el mismo idioma.
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();
// 省略
}
Controllers-HomeController.cs
Controllers-HomeController.cs archivo.
Para obtener un idioma localizado en el lado del controlador, iStringLocalizer
Por cierto, además de IStringLocalizer, también hay un IHtmlLocalizer que puede obtener HTML tal como está.
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();
}
// 省略
}
Views-_ViewImports.cshtml
Views-_ViewImports.cshtml archivo.
Para usar un localizador en el lado de la
IHtmlLocalizer está en el espacio de nombres Microsoft.AspNetCore.Mvc.Localization, por lo que definiré esto como using.
Si solo desea utilizar el localizador en un punto determinado, puede incluir el código siguiente en un archivo de vista independiente. Si lo escribe en un archivo _ViewImports.cshtml, podrá usarlo automáticamente en todos los archivos de vista.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Vistas-Home-Index.cshtml
Views-Home-Index.cshtml archivo. El texto obtenido en el lado del controlador y el texto obtenido directamente en el lado de la vista se muestran respectivamente. El localizador del lado de la vista también obtiene el texto especificando una cadena de clave para el indizador.
@{
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>
Comprobar operación
Cadena de consulta
Puede cambiar el idioma de presentación especificando un código de referencia cultural en la cadena de consulta de la dirección URL. El formato es ?culture-<culture code>. Si desea separarlo de la interfaz de usuario, será ?culture-<código de referencia>&ui-culture-<código de referencia>.
Si no especifica nada: Si no se especifica, se utiliza SharedResource.resx. (De hecho, se ha aplicado otra sentencia...)
El patrón especificado para ?culture.en. El idioma de visualización es el inglés.
El patrón especificado para ?culture.es. El idioma de visualización es el español.
El patrón especificado para ?culture-ja. Originalmente, se utiliza el archivo SharedResource.ja.resx. SharedResource.resx se utiliza porque no existe.
Intente especificar un idioma que no existe. SharedResource.resx se utiliza porque no hay ningún archivo correspondiente aquí.
Galletas
Las cookies pueden cambiar el idioma de visualización. Normalmente publicado desde el lado del servidor, pero esta vez voy a tratar de registrar las cookies directamente en la función del navegador.
Debido a que cada navegador web tiene una herramienta de desarrollo, la utiliza para registrar cookies. En la figura siguiente, puede presionar F12 en Edge para mostrar las herramientas de desarrollo.
El nombre de la cookie correspondiente es . AspNetCore.Culturey, y el valor que especifica el idioma es Ingrese en la forma de c-<código de referencia cultural>-uic-<código de referencia cultural>. En el caso de las cookies, también debe introducir el código ui. Una vez que haya registrado su cookie, actualice la página de su navegador web para actualizarla. Se envía una cookie al servidor para que el servidor recupere el idioma especificado.
En la figura siguiente, puede introducir c-en-uic-en para mostrar el inglés.
tipo c-es-uic-es para mostrar el español.
Encabezado HTTP Accept-Language
El encabezado HTTP Accept-Language comprueba la información de encabezado solicitada desde el explorador web al servidor. Es la capacidad de cambiar de idioma en consecuencia.
Puede enviar cualquier idioma aceptado en la configuración del explorador web, pero de forma predeterminada puede coincidir con la configuración del idioma del sistema operativo. Aceptar-Idioma ahora se envía. (Si realmente se envía depende del sistema operativo y el navegador web.) El idioma se inicializa en el explorador web para el idioma del sistema operativo, pero puede ser correcto.)
Así, por ejemplo, como se muestra en la figura siguiente, puede abrir la página en el navegador web del sistema operativo en inglés y enviar información en, para que pueda automáticamente SharedResource.en.resx está seleccionado para mostrar inglés.
Si intenta especificar un idioma que no existe en la cadena de consulta, debe usar originalmente SharedResource.resx. Accept-Language muestra el inglés porque existe en.
Si se especifica ja en la cadena de consulta, la cadena de consulta tiene prioridad y se muestra japonés.
Resumen
Aquí traté de implementar la conmutación en varios idiomas de la manera más fácil. Para cambiar de idioma para que coincida con el entorno del usuario, utilice el encabezado HTTP Accept-Language como idioma de visualización predeterminado. Si el usuario elige cualquier idioma, es una buena idea agregar cookies o agregar (o escribir directamente) de la cadena de consulta.