ASP.NET: локализуйте контент с помощью смешанного форматирования HTML - PullRequest
14 голосов
/ 09 марта 2009

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

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

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

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

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

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

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

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

Stefan

Ответы [ 6 ]

4 голосов
/ 09 марта 2009

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

1 голос
/ 18 июня 2012

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

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

<p>Let's 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"))

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

1 голос
/ 23 ноября 2011

Сделай так:

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

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

<p>Let's have a <a href="{0}">cup of coffee</a> and get <b>energized</b>.</p> 
0 голосов
/ 21 сентября 2011

Пример веб-сайта 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="http://www.asp.net" title="ASP.NET
          Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
</asp:Content>

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

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

  2. <p>To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.</p>

  3. <p>You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409" title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.</p>
0 голосов
/ 10 марта 2009

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

0 голосов
/ 09 марта 2009

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

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

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

Спасибо!

...