2011-12-28 14 views
5

Estoy trabajando en una aplicación web globalizada en ASP.NET MVC3. El proyecto contiene los archivos de recursos I18N y normalmente acceder a los recursos dentro de mi maquinilla de afeitar ve como ...¿Cómo se formatea cadenas localizadas para que las palabras sueltas de una oración sean un enlace?

@I18N.MyResourceString 

que tienen una situación difícil que no he sido capaz de encontrar una solución elegante para todavía. Necesito poder localizar la oración "Haga clic aquí para donar". donde la palabra 'aquí' debería ser un enlace a nuestro sistema de donación.

mayoría de los enlaces en el sitio son internos de modo de crear enlace Simplemente escribo ...

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

Esta donación enlace es externo. Lo que tengo hasta ahora (que no funciona) es ...

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

donde el texto del I18N.ClickHereToDonate de recursos es "Click {0} to donate.".

Lo que veo en la pantalla es ...

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

Por otra parte, también me gustaría añadir un atributo 'título' de la 'a' etiqueta. Se hace aún más feo que cuando intento ...

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

Tiene que haber una mejor manera de formar complejos con cadenas de etiquetas incrustadas sin concatenación de cosas juntos de tal manera hacker. No solo no funciona (el marcado pretendido se codificó) sino que hace que el HTML dentro de una cadena sea literal en mi plantilla de afeitadora, lo que me hace perder cualquier capacidad increíble de soporte/intercalación/refactorización de IDE.

¿Cómo se puede inyectar el marcado en las cadenas localizadas?

ACTUALIZACIÓN
Adam Tuliper menciona el método @Html.Raw ayudante en su respuesta, así que añadí a mi ya fea marcado ...

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

Este al menos me tiene un enlace de click-poder en el marcado de salida.

Haz clic en here para donar.

Sin embargo, sigue siendo una solución no muy elegante, por lo que todavía estoy buscando mejores formas de hacerlo.

Respuesta

2

quizás tratar

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

En general, no es necesario el formato de cadena - que sólo puede inyectar las cosas de afeitar dentro de los elementos HTML normal.

Editar: Incorporar el siguiente:

@Html.Raw(String.Format(@I18N.ClickHereToDonate,String.Format("<a href='http://paypal.com' title='{0}'>{1}</a>", I18N.PayPal,I18N.Here))) 
+2

él necesita string.format como la cadena de arriba contiene marcadores de posición. {0}, etc. –

+0

Esto es a lo que tuve que recurrir por ahora, pero no es el resultado deseado. A la empresa le gustaría que solo la palabra "aquí" sea un enlace, no la oración completa. Su respuesta es exactamente lo que ya hago para mis enlaces de elementos de menú, que son todos una palabra o solo unas pocas palabras. –

+0

He editado lo anterior para usar @ Html.Raw - Adam lo usó a continuación. Usar dos String.Formats debería darle el resultado deseado, sin la necesidad de cambiar las cadenas de recursos o cualquier otra cosa. –

1

Sus opciones son limitadas y sin soporte incorporado para este escenario (y que no se encuentra en los ayudantes) La forma más limpia es formar sus URL en un modelo de vista y pasa ese modelo de vista a la vista para que tengas un html mínimo. Su modelo de vista contiene clase pública WhateverIndexViewModel { clave pública cadena {get; set;} cadena pública URI {get; set;} Título cadena pública {get; set;} }

Establecer la información en su controlador, páselo a su vista y use

 

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

Como una idea básica. Tenga en cuenta que si no desea utilizar Html.Raw aquí, su URI en la clase sería de tipo MvcString no Cadena de esta manera @Links ["YourKey"]. URI no estará codificado en html.

+0

El 'Html.Raw' sí me ayudó a obtener el marcado no codificado como lo describí en mis preguntas. Pero no entiendo cómo lo que describes me ayudará a insertar ese enlace en una cadena localizada ... –

Cuestiones relacionadas