2011-05-20 227 views
7

Me gustaría mostrar MessageBox (WinForms) con cadena desde Recursos con saltos de línea.C# - MessageBox - Localización de mensajes en recursos y saltos de líneas

ejemplo sin Recursos (obras):

string someMsg = "Message. Details:\n" + someDetails; 

MessageBox.Show(someMsg); 

Resultados:

de mensajes. Detalles:

aquí están algunos detalles

Cuando muevo cadena "Detalles del mensaje:. \ N" en Recursos:

string someMsg = GlobalStrings.MsgBoxJustTest + someDetails; 
MessageBox.Show(someMsg); 

Resultado:

mensaje. Detalles: \ n hay algunos detalles

Cuando moví la cadena con "\ n" a los recursos, entonces MessageBox.Show() se detuvo para interpretarlo como nueva línea.

Editar: Estoy pensando en: someMsg.Replace (@ '\ n', Environment.NewLine); pero sigue siendo bastante molesto por algo tan simple.

+0

relacionado, pero no duplicado: http://stackoverflow.com/questions/357804/string-replace-on-escape-characters – Tao

+0

No deseo manejar esto en código mediante el método Reemplazar o editar. Me gustaría agregar este archivo de recursos al usuario "ordinario" que puede traducirlo fácilmente. – binball

+0

correcto, pero seguramente el usuario "ordinario" encontrará más natural colocar los saltos de línea reales en los lugares correctos, que mantener "\ n" marcadores de posición? (ver el comentario de @Chilaka Umesh a su respuesta). Tal vez la pregunta es: ¿Cómo estás "moviendo" estas cadenas a los archivos de recursos? Este proceso de mudanza es donde \ n debe reemplazarse con un salto de línea real. – Tao

Respuesta

10

si agrega eso a los recursos, no toma \ n como escape. Abra su archivo de recursos en el bloc de notas para ver esto y cahnge en el archivo XML (resx)

o

Escriba sus datos en el bloc de notas con una nueva línea. copia que y pegar en su editor de recursos

edición:

o

Tipo/Pegar sus datos en la interfaz de usuario editor de recursos, seleccione el \ n y reemplazarlo con un salto de línea actual, con Shift-Enter.

+0

Ya veo ... pero me gustaría que fuera automático y lo más simple posible. – binball

+5

En el editor de recursos, escriba "Mensaje. Detalles:" y luego presione "shift + enter" con solo ingresar la tecla. Esto podría ayudarte. –

+0

+1 @Chilaka: ¡Thx! Eso es. Mayús + Entrar, gracias – binball

0

Tal vez se puede abrir el resx como el código y añadir los saltos de línea directamente en el XML

O

Posiblemente se pierden durante la lectura debido a carácter de escape tal vez trate de usar \\

+0

thx, pero no quiero cambiar de código-> Recursos-> Edición de código de recursos. – binball

1

Se podría hacer algo como esto (siempre y cuando su no .NET 2.0):

public static class StringExt 
{ 
    public static String FixNewLines(this String str) 
    { 
    return str.Replace(@'\n',Environment.NewLine); 
    } 
} 

Y luego:

string someMsg = GlobalStrings.MsgBoxJustTest + someDetails; 
MessageBox.Show(someMsg.FixNewLines()); 

Sin embargo, esto afectará TODAS las cadenas en su aplicación (ámbito de espacio de nombres)

Es una solución sucia, pero es una solución rápida.

Personalmente, simplemente corregía mi lógica hasta el final, en lugar de hacer algo como lo anterior.

0

Una solución fácil es almacenar "marcadores de posición" en las cadenas de recursos. Por ejemplo, esta cadena se almacena en * .resx bajo la clave "MessageDetails": "Mensaje. Detalles: {0} {1}". Luego, en su código, úselo de esta manera:

MessageBox.Show (String.Format (GlobalStrings.MessageDetails, Environment.NewLine, @ "The message"));

La ventaja aquí es la portabilidad, como puede ver.

Cuestiones relacionadas