Как отформатировать локализованные строки, чтобы отдельные слова предложения были ссылкой?

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

@I18N.MyResourceString

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

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

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

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

@String.Format(I18N.ClickHereToDonate, "" + I18N.Here + "")

где текст ресурса I18N.ClickHereToDonate - "Нажмите {0}, чтобы пожертвовать.".

То, что я вижу на экране, это...

Click here to donate.

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

@String.Format(I18N.ClickHereToDonate, "" + I18N.Here + "")

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

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

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

@Html.Raw(String.Format(I18N.ClickHereToDonate, "" + I18N.Here + ""))

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

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

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

5
задан Jesse Webb 28 December 2011 в 22:41
поделиться