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&clcid=0x409'; return false;"
title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
</p>
</asp:Content>
Как бы вы их локализовали: