ASP.NET: локализовать контент со смешанным форматированием HTML

В моем приложении у меня есть параграфы со смешанным статическим текстом и форматированием HTML и ссылками. Я ищу хорошее решение для локализации, которое позволяет разделить ресурсы на разметку. Скажем, у нас есть следующий абзац:

<p>Let have a <a href="someURL">cup of coffee</a> and get <b>energized</b>.</p>

Использование стандартного решения resx заставляет меня вставлять разметку HTML и назначения ссылок в строку resx. Это плохо, потому что он соединяет структуру разметки /CSS/app с ресурсами.

Следующее лучшее - разделить абзац таким образом, чтобы локализованный контент никогда не содержал разметки. В приведенном выше примере у меня было бы 4 фрагмента: 1) "Пусть есть" в виде простого текста 2) "чашка кофе" в качестве ссылки 3) "и получить" как обычный текст 4) "под напряжением" в виде жирного текста

Проблема с этим решением заключается в том, что фрагментация делает основной ресурс полным кошмаром, а также создает определенный порядок фрагментов абзаца, который может не соответствовать грамматике всех культур. Например, на переведенном языке правильный перевод может быть

<p>Let get <b>energized</b> with a <a href="someURL">cup of coffee</a>.</p>

Я не думаю, что я могу уйти от того, чтобы не встраивать разметку в ресурсы, и это может быть не очень дорого. Используя правильную разметку /CSS (span, div, id, class), я могу создавать абстракции, которые уменьшали бы влияние сцепления.

Что мне делать с URL-адресами ссылок? Спасибо,

Стефан

Ответы

Ответ 1

Не рассматривайте HTML как "форматирование", а как структуру и сохраняйте все это в хранилище данных ресурсов (например, resx, или в базе данных, или в файлах xml или что-то в этом роде). Тогда вы можете перестать беспокоиться о маленьких фрагментах текста внутри абзаца. Вместо этого у вас будет некоторая ссылка на ресурс под названием "paragraph_energized_with_coffee" или что-то в каждом регионе, и любое программное обеспечение, которое вы используете для редактирования ресурсов, определит, какие редакторы гибкости структурируют html внутри каждого ресурса.

Ответ 2

Сделайте это так:

<%= String.Format("Resources.MyResource.mydata","someURL") %>

и используйте это как строку ресурса:

<p>Let have a <a href="{0}">cup of coffee</a> and get <b>energized</b>.</p> 

Ответ 3

У меня была такая же проблема. Если я правильно читаю ваш вопрос, это то, что я смог сделать для его решения:

В моих ресурсах я добавил следующий текст:

<p>Let get <b>energized</b> with a <a href="{0}">cup of coffee</a>.</p>

И в моем представлении ASP.NET(с использованием представления Razor) я добавил следующее:

@Html.Raw(String.Format(ShopSavvy.Retailers.Web.Resources.Home.Index.perksReachShoppersBody1, "someURL"))

Выполнение этого дало мне все текстовое форматирование, которое мне нужно для правильного эффекта.

Ответ 4

Я нахожусь на стороне Rahuls - я бы рассмотрел html/css контента... только это... контент.

Основная причина заключается в том, что, когда вы хотите делать массовые обновления содержимого веб-сайта, вам просто нужно скопировать вставку из предоставленного html/css в файлы resx. Это также намного быстрее сделать оригинальную templating из html/css в asp.net.

Существуют также некоторые инструменты рефрактора, которые имеют опции "экспорт в файл resx" при выборе содержимого, которое может ускорить процесс.

Спасибо!

Ответ 5

Я столкнулся с этой проблемой в той же самой проблеме. Это намеренно, поскольку, если вы отправляете файл ресурсов переводчику, он/она может не понимать HTML и может повредить ваш код. Мне это тоже не нравится.

Ответ 6

Веб-сайт Visual Studio по умолчанию содержит:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" 
       AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>Welcome to ASP.NET!</h2>
    <p>To learn more about ASP.NET visit <a href="#" onclick="location.href='http://www.asp.net'; return false;" title="ASP.NET
          Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="#" onclick="location.href='http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409'; return false;"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

Как бы вы их локализовали:

  • <h2>Welcome to ASP.NET!</h2>

  • <p>To learn more about ASP.NET visit <a href="#" onclick="location.href='http://www.asp.net'; return false;" title="ASP.NET Website">www.asp.net</a>.</p>

  • <p>You can also find <a href="#" onclick="location.href='http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409'; return false;" title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.</p>