Я работаю над глобализированным веб-приложением в 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>"))
Этот по крайней мере дал мне ссылку для клика в выводимой разметке.
Нажмите здесь , чтобы сделать пожертвование.
Это все еще далеко не элегантное решение, поэтому я все еще ищу более эффективные способы сделать это.