Как вы форматируете локализованные строки, чтобы отдельные слова предложения были ссылкой? - PullRequest
5 голосов
/ 29 декабря 2011

Я работаю над глобализированным веб-приложением в ASP.NET MVC3. Проект содержит файлы ресурсов I18N, и я обычно обращаюсь к ресурсам в моих представлениях Razor, как ...

@I18N.MyResourceString

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

Большинство ссылок на сайте являются внутренними, поэтому для создания ссылки я просто пишу ...

@Html.ActionLink("Some link text", "MyAction", "MyController")

Эта ссылка на пожертвование является внешней. То, что я до сих пор (который не работает), это ...

@String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\">" + I18N.Here + "</a>")

где текст ресурса I18N.ClickHereToDonate равен "Click {0} to donate.".

На экране я вижу ...

Click <a href="http://paypal.com">here</a> to donate.

Кроме того, я также хотел бы добавить атрибут title к тегу a. Становится еще страшнее, когда я пытаюсь это ...

@String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\" title=\"" + I18N.PayPal + "\">" + I18N.Here + "</a>")

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

Как можно добавить разметку в локализованные строки?

UPDATE
Адам Тюльпер упомянул вспомогательный метод @Html.Raw в своем ответе, поэтому я добавил его в свою и без того некрасивую разметку ...

@Html.Raw(String.Format(I18N.ClickHereToDonate, "<a href=\"http://paypal.com\" title=\"" + I18N.PayPal + "\">" + I18N.Here + "</a>"))

Этот по крайней мере дал мне ссылку для клика в выводимой разметке.

Нажмите здесь , чтобы сделать пожертвование.

Это все еще далеко не элегантное решение, поэтому я все еще ищу более эффективные способы сделать это.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Может быть попробовать

<a href="http://paypal.com" title="@I18N.PayPal">@I18N.ClickHereToDonate</a>

В общем, вам не нужен формат String - вы можете просто вставить вещи Razor в обычные HTML-элементы.

Редактировать: Включая ниже:

@Html.Raw(String.Format(@I18N.ClickHereToDonate,String.Format("<a href='http://paypal.com' title='{0}'>{1}</a>", I18N.PayPal,I18N.Here)))
1 голос
/ 29 декабря 2011

Ваш выбор ограничен без встроенной поддержки для этого сценария (и его нет в помощниках). Более чистый способ - сформировать ваши URL-адреса в модели представления и передать эту модель представления в представление, чтобы у вас было минимальное количество HTML.Ваш ViewModel содержит открытый класс WhwhatIndexViewModel {открытая строка Key {get; set;} открытая строка URI {get; set;} открытая строка Title {get; set;}}

Установите информацию в вашем контроллере, передайте еена ваш взгляд и используйте


<a href="@Html.Raw(Links["YourKey"].URI)">@Links["YourKey"].Title"</a>

В качестве основной идеи.Обратите внимание, что если вы не хотите использовать здесь Html.Raw, тогда ваш URI в классе будет иметь тип MvcString, а не String @Links ["YourKey"]. URI не будет кодироваться в формате html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...