web-dev-qa-db-fra.com

Utilisation de fichiers de ressources HTML Inside

Je développe un standard petit ASP.NET MVC site Web qui sera rendu multilingue à l'aide de ASP.NET Fichiers de ressources.

Ma question concerne les fichiers de ressources. Voir si vous avez un bloc de texte qui devrait être affiché aux paragraphes, est-il approprié d'ajouter <p> Tags à l'intérieur de votre texte de fichier de ressources?

Sinon, quelle serait la meilleure façon de gérer?

35
Peter

Lorsque je suis confronté à la même question, j'ai décidé de disposer des paragraphes directement dans des ressources. Séparer le texte de texte par de simples nouvelles lignes (Maj + Entrée si je ne me trompe pas). Créez ensuite une méthode d'assistance pour envelopper les blocs dans les paragraphes.

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());
    }
  }
}

Ensuite, à votre vue, vous importez votre espace de noms d'extension:

<%@ Import Namespace="MyHtmlExtensions" %>

Et appliquer-le:

<%= Resources.Texts.HelloWorld.WrapTextBlockIntoParagraphs () %>

Je pense que c'est un moyen plus propre que de mettre des balises de balisage dans des ressources texte où elles n'appartiennent en principe pas.

12
user151323

Vous pouvez envelopper les données du champ Valeur RESX dans un bloc CDATA, <![CDATA[ ]]>.

par exemple.

<![CDATA[My text in <b>bold</b>]]>

En fonction de la façon dont vous voulez l'utiliser, vous devrez probablement dépasser le <![CDATA[ et ]]> Dans votre application.

Cette approche vous permet d'inclure n'importe quel marquage HTML dans le fichier RESX. Je fais cela pour stocker des messages texte formatés à afficher dans une boîte de dialogue JQuery-UI à partir de diverses vues dans une application ASP.NET MVC.

5
Tony Bennett

Oui et non. Les ressources sont un bon endroit pour stocker du texte localisé et, fondamentalement, cela vous permettra d'envoyer toute la ressource à une agence de traduction qui fera toutes les traductions pour vous. Donc, c'est un plus. Cependant, il augmente également les chances de bugs simplement parce que vous pourriez oublier d'encoder ou de décoder le HTML. Le fichier .resx est un fichier XML afin qu'il doit être stocké codé dans la ressource. (Heureusement, cela le codera automatiquement.) Lorsque vous le récupérerez à nouveau, il sera décodé automatiquement à nouveau. Toutefois, si vous transmettez le texte à d'autres fonctions, il y a un risque qu'il sera encodé à nouveau, ce qui entraîne <B> Bold </ B> au lieu de gras... Vous aurez donc besoin de tests supplémentaires. Qui est quelque chose que vous pouvez gérer.

Mais le gros problème pourrait être pour la personne qui fait les traductions. S'ils traduisent simplement le fichier .resx, ils verront des chaînes codées. Cela pourrait être résolu s'ils utilisent quelque chose pour rendre les ressources plus lisibles. Aussi longtemps qu'ils ne traduiront pas les tags eux-mêmes. Ils pourraient confondre les personnes qui feront les traductions.

5
Wim ten Brink

Utilisez UrlenCoder pour stocker la chaîne HTML dans la ressource; Décode ensuite la chaîne et utilisez WebView plutôt que de convertir toutes les balises HTML.

Urldecoder décode l'argument qui est supposé être codé dans le type de contenu MIME X-www-Form-Urlencode. '+' sera converti en espace, '%' et deux caractères chiffres suivants sont convertis en valeur d'octet équivalente. Tous les autres personnages sont passés via non modifiés.

Par exemple "A + B + C% 24% 25" -> "A B C $ $%".

1
Blantant

Vous pouvez aussi bien ouvrir votre fichier de ressources dans designer et simplement taper html et texte comme vous le souhaitez.

Par exemple: Resource Text <b>Data</b>

Cependant, la solution de @tony Bennett fonctionne parfaitement ..

Aussi quelque chose comme ça fonctionne; Les caractères spéciaux ici sont utilisés pour ouvrir/fermer les supports de triangle de <et>:

are you targeting to &lt;b&gt;sustain&lt;/b&gt; the Mark they achieved
1
t_plusplus

Je dirais que cela devrait être évité, mais parfois, il est pratiquement inévitable. Idéalement, il serait préférable de stocker vos ressources à un niveau de granularité qui vous permet d'ajouter le balisage de présentation en commun pour toutes les langues de la zone appropriée de l'application.

Parfois, les différences gramaticales entre les langues rendent cela difficile. Parfois, vous voulez stocker de grandes morceaux de ressources textuelles (assez grande pour qu'ils devraient englober des choses comme p Tags). Cela dépend un peu de ce que vous faites.

1
UpTheCreek

Nous faisons.

Vous pouvez utiliser un convertisseur TEXT-TO-HTML, mais comme le texte contient beaucoup d'informations que HTML vous seriez restreint.

0
Anthony Johnston