asp.net - español - set default culture asp net core
Uso de HTML dentro de los archivos de recursos (8)
Estoy desarrollando un pequeño sitio web ASP.NET MVC estándar que se convertirá en multilingüe utilizando archivos de recursos de ASP.NET .
Mi pregunta es sobre los archivos de recursos. Vea si tiene un bloque de texto que debe mostrarse en párrafos, ¿es apropiado agregar etiquetas <p>
dentro del texto del archivo de recursos?
Si no, ¿cuál sería la mejor manera de lidiar con eso?
Cuando me enfrenté a la misma pregunta, decidí no tener párrafos directamente en los recursos. Bloque de texto separado por simples líneas nuevas (Mayús + Entrar si no me equivoco). Luego crea un método de ayuda para envolver los bloques en párrafos.
using System;
using System.Text;
using System.Web;
namespace MyHtmlExtensions
{
public static class ResourceHelpers
{
public static IHtmlString WrapTextBlockIntoParagraphs(this string s)
{
if (s == null) return new HtmlString(string.Empty);
var blocks = s.Split(new string[] { "/r/n", "/n" },
StringSplitOptions.RemoveEmptyEntries);
StringBuilder htmlParagraphs = new StringBuilder();
foreach (string block in blocks)
{
htmlParagraphs.Append("<p>" + block + "</p>");
}
return new HtmlString(htmlParagraphs.ToString());
}
}
}
Luego, en su vista, importa el espacio de nombres de su método de extensión:
<%@ Import Namespace="MyHtmlExtensions" %>
Y aplicarlo:
<%= Resources.Texts.HelloWorld.WrapTextBlockIntoParagraphs () %>
Creo que es una forma más limpia que poner etiquetas de marcado en recursos de texto donde, en principio, no pertenecen.
Diría que esto debería evitarse, pero a veces es prácticamente inevitable. Idealmente, sería mejor almacenar sus recursos en un nivel de granularidad que le permita agregar el marcado de presentación en común para todos los idiomas en el área apropiada de la aplicación.
A veces, las diferencias gramaticales entre idiomas hacen que esto sea difícil. A veces desea almacenar grandes porciones de recursos basados en texto (lo suficientemente grandes como para abarcar cosas como etiquetas p). Depende un poco de lo que estás haciendo.
Hacemos.
Podría usar un convertidor de texto a HTML, pero como el texto contiene mucha menos información que HTML, estaría restringido.
Puede envolver los datos para el campo de valor de resx en un bloque CDATA, <![CDATA[ ]]>
.
p.ej
<![CDATA[My text in <b>bold</b>]]>
Dependiendo de cómo quiera usarlo, probablemente tendrá que quitar el <![CDATA[
y ]]>
dentro de su aplicación.
Este enfoque le permite incluir cualquier marcado HTML en el archivo resx. Lo hago para almacenar mensajes de texto formateados que se mostrarán en un diálogo de jquery-ui desde varias vistas dentro de una aplicación asp.net mvc.
Puede usar el método @Html.Raw
dentro de su vista, por ejemplo @Html.Raw(STRING FROM RESX FILE HERE)
Si y no. Los recursos son un buen lugar para almacenar texto localizado y, básicamente, esto le permitirá enviar el recurso completo a alguna agencia de traducción que hará todas las traducciones por usted. Entonces, eso es una ventaja. Sin embargo, también aumenta la posibilidad de errores simplemente porque puede olvidarse de codificar o decodificar el HTML. El archivo .resx es un archivo xml, por lo que debe almacenarse codificado en el recurso. (Afortunadamente, lo codificará automáticamente.) Cuando lo recupere nuevamente, se decodificará automáticamente de nuevo. Sin embargo, si pasa el texto a otras funciones, existe el riesgo de que se codifique de nuevo, lo que resulta en <b> negrita </ b> en lugar de negrita ... Por lo tanto, necesitará algunas pruebas adicionales. Que es algo que puedes administrar.
Pero el gran problema podría ser para la persona que hace las traducciones. Si solo traducen el archivo .resx, verán las cadenas codificadas. Esto podría resolverse si usan algo para hacer los recursos más legibles. Siempre y cuando no traduzcan las etiquetas ellos mismos. Podrían confundir a las personas que harán las traducciones.
También podría abrir su archivo de recursos en el diseñador y simplemente escribir html y texto como lo desee.
Por ejemplo: Resource Text <b>Data</b>
Sin embargo, la solución de @Tony Bennett funciona perfectamente ...
También algo como esto funciona; los caracteres especiales aquí se usan para abrir / cerrar los corchetes triangulares de <y>:
are you targeting to <b>sustain</b> the Mark they achieved
Use URLEncoder para almacenar la cadena HTML dentro del recurso; luego decodifique la cadena y use la vista web en lugar de convertir todas las etiquetas HTML.
URLDecoder decodifica el argumento que se supone que está codificado en el tipo de contenido MIME de x-www-form-urlencoded. ''+'' se convertirá en espacio, ''%'' y dos siguientes dígitos hexadecimales se convertirán al valor de byte equivalente. Todos los demás personajes se pasan sin modificaciones.
Por ejemplo, "A + B + C% 24% 25" -> "ABC $%".