web-dev-qa-db-ja.com

リソースファイル内でのHTMLの使用

標準の小さな ASP.NET MVC ウェブサイトを開発しています。これは ASP.NET リソースファイルを使用して多言語化されます。

私の質問は、リソースファイルについてです。段落に表示する必要があるテキストのブロックがあるかどうかを確認します。リソースファイルテキスト内に<p>タグを追加するのは適切ですか?

そうでない場合、それに対処するための最良の方法は何でしょうか?

35
Peter

ビュー内で_@Html.Raw_メソッドを使用できます。 @Html.Raw(STRING FROM RESX FILE HERE)

72
Evrm

私が同じ質問に直面したとき、私は直接リソースにパラグラフを置くことに反対しました。テキストブロックを単純な新しい行で区切ります(間違えていなければShift + Enterキーを押します)。次に、ブロックを段落にラップするヘルパーメソッドを作成します。

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

次に、ビューで拡張メソッドの名前空間をインポートします。

<%@ Import Namespace="MyHtmlExtensions" %>

そしてそれを適用します:

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

原則として、マークアップタグが属していないテキストリソースにマークアップタグを配置するよりも、よりクリーンな方法だと思います。

12
user151323

Resx値フィールドのデータをCDATAブロック<![CDATA[ ]]>でラップできます。

例えば.

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

使い方に応じて、アプリ内の<![CDATA[]]>を取り除く必要があります。

このアプローチにより、resxファイルに任意のHTMLマークアップを含めることができます。これを行うのは、asp.net mvcアプリ内のさまざまなビューからjquery-uiダイアログに表示されるフォーマット済みテキストメッセージを格納するためです。

5
Tony Bennett

はいといいえ。リソースはローカライズされたテキストを保存するのに適した場所であり、基本的にこれにより、すべての翻訳を行う翻訳会社にリソース全体を送信できます。それで、それはプラスです。ただし、HTMLのエンコードまたはデコードを忘れた可能性があるため、バグの可能性も高くなります。 .resxファイルはxmlファイルであるため、リソースにエンコードして保存する必要があります。 (幸いにも、自動的にエンコードされます。)再度取得すると、自動的にデコードされます。ただし、テキストを他の関数に渡すと、テキストが再度エンコードされて、<b>太字</ b>になる代わりに、 大胆な...したがって、追加のテストが必要になります。これはあなたが管理できるものです。

しかし、大きな問題は、翻訳を行う人にある可能性があります。 .resxファイルを変換するだけの場合、エンコードされた文字列が表示されます。これは、リソースを読みやすくするために何かを使用する場合に解決できます。タグ自体を翻訳しない限り。彼らは翻訳をする人を混乱させるかもしれません。

5
Wim ten Brink

URLEncoderを使用して、HTML文字列をリソース内に保存します。次に、文字列をデコードし、すべてのHTMLタグを変換するのではなく、webviewを使用します。

URLDecoderは、x-www-form-urlencoded MIMEコンテンツタイプでエンコードされていると想定される引数をデコードします。 「+」はスペースに変換され、「%」とそれに続く2つの16進数文字は同等のバイト値に変換されます。他のすべての文字は変更されずに渡されます。

たとえば、「A + B + C%24%25」->「A B C $%」。

1
Blantant

リソースファイルをデザイナーで開いて、必要に応じて単にhtmlとテキストを入力することもできます。

例えば: Resource Text <b>Data</b>

ただし、@ Tony Bennettのソリューションは完全に機能します。

このようなものも機能します。ここでの特殊文字は、<と>の三角括弧を開閉するために使用されます。

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

これは避けるべきだと思いますが、実際には避けられないことがあります。理想的には、アプリの適切な領域のすべての言語に共通のプレゼンテーションマークアップを追加できるレベルの粒度でリソースを保存するのが最善です。

言語間の文法的な違いにより、これが困難になる場合があります。時には、テキストベースのリソースの大きなチャンク(pタグのようなものを含める必要があるほど十分に大きい)を格納したい場合があります。それはあなたが何をしているかによります。

1
UpTheCreek

します。

テキストからHTMLへのコンバータを使用することもできますが、テキストに含まれる情報はHTMLよりもはるかに少ないため、制限されます。

0