VS2005 Resource Editor - How to make new line from string resource?

P

Peter Hartlén

I understand that the\n and \r only means something to the C# compiler so
when retrieving a line like "Hello\r\nWorld" from a resource file (localized
form or self made resource file), it prints the text as just like it was
written.

Is there any easy way to introduce a newline (tab etc.) into a string
retrieved from a resource file? Or should I create a resource string for
each line?

Thanks,

Peter
 
M

Michael Nemtsev

Hello Peter,

Why not just read it into the string Properties.Resources.<your_resource>
and then add the new lines ?

---
WBR,
Michael Nemtsev [.NET/C# MVP] :: blog: http://spaces.live.com/laflour

"The greatest danger for most of us is not that our aim is too high and we
miss it, but that it is too low and we reach it" (c) Michelangelo


PH> I understand that the\n and \r only means something to the C#
PH> compiler so when retrieving a line like "Hello\r\nWorld" from a
PH> resource file (localized form or self made resource file), it prints
PH> the text as just like it was written.
PH>
PH> Is there any easy way to introduce a newline (tab etc.) into a
PH> string retrieved from a resource file? Or should I create a resource
PH> string for each line?
PH>
PH> Thanks,
PH>
PH> Peter
PH>
 
P

Peter Hartlen

Why not just read it into the string Properties.Resources. said:
and then add the new lines ?

Hmm, I'm not sure I follow...

I have a resource file with the following tag and text:
MsgHelloWorld "Hello\r\nWorld"

I then retrieve the resource with a resource manager like this:
resMan = new ResourceManager( ... )
string msg = resMan.GetString("MsgHelloWorld");
MessageBox.Show(msg);

This will print "Hello\r\nWorld", but I want it to print:
"Hello
World"

How did you mean I could solve this?

/ Peter
 
M

Michael Nemtsev

Hello Peter,

hmmmmm, interesting.
seems that smth wrong with the text encoding. need to investigate

---
WBR,
Michael Nemtsev [.NET/C# MVP] :: blog: http://spaces.live.com/laflour

"The greatest danger for most of us is not that our aim is too high and we
miss it, but that it is too low and we reach it" (c) Michelangelo

PH> Hmm, I'm not sure I follow...
PH>
PH> I have a resource file with the following tag and text:
PH> MsgHelloWorld "Hello\r\nWorld"
PH>
PH> I then retrieve the resource with a resource manager like this:
PH> resMan = new ResourceManager( ... )
PH> string msg = resMan.GetString("MsgHelloWorld");
PH> MessageBox.Show(msg);
PH> This will print "Hello\r\nWorld", but I want it to print:
PH> "Hello
PH> World"
PH> How did you mean I could solve this?
PH>
PH> / Peter
PH>
 
M

Michael Nemtsev

Hello Michael,

ahh, damn, almost forgot, it's old trick.
when u read from the resources, you lost your escape sequece. u need to restore
it. changing \\r on \r

the following code fix it

string str = Properties.Resources.MsgHelloWorld;
str = str.Replace("\\n", "\n");
str = str.Replace("\\r", "\r");

---
WBR,
Michael Nemtsev [.NET/C# MVP] :: blog: http://spaces.live.com/laflour

"The greatest danger for most of us is not that our aim is too high and we
miss it, but that it is too low and we reach it" (c) Michelangelo


MN> Hello Peter,
MN>
MN> hmmmmm, interesting.
MN> seems that smth wrong with the text encoding. need to investigate
MN> ---
MN> WBR,
MN> Michael Nemtsev [.NET/C# MVP] :: blog:
MN> http://spaces.live.com/laflour
MN> "The greatest danger for most of us is not that our aim is too high
MN> and we miss it, but that it is too low and we reach it" (c)
MN> Michelangelo
MN>PH>> Hmm, I'm not sure I follow...
PH>>
PH>> I have a resource file with the following tag and text:
PH>> MsgHelloWorld "Hello\r\nWorld"
PH>>
PH>> I then retrieve the resource with a resource manager like this:
PH>> resMan = new ResourceManager( ... )
PH>> string msg = resMan.GetString("MsgHelloWorld");
PH>> MessageBox.Show(msg);
PH>> This will print "Hello\r\nWorld", but I want it to print:
PH>> "Hello
PH>> World"
PH>> How did you mean I could solve this?
PH>> / Peter
PH>>
 
W

Willy Denoyette [MVP]

Peter Hartlen said:
Hmm, I'm not sure I follow...

I have a resource file with the following tag and text:
MsgHelloWorld "Hello\r\nWorld"

I then retrieve the resource with a resource manager like this:
resMan = new ResourceManager( ... )
string msg = resMan.GetString("MsgHelloWorld");
MessageBox.Show(msg);

This will print "Hello\r\nWorld", but I want it to print:
"Hello
World"

How did you mean I could solve this?

MsgHelloWorld "Hello{0}World"
....

string msg = String.Format(resMan.GetString("MsgHelloWorld"),
Environment.NewLine));

Willy.
 
G

Grant Frisken

Hmm, I'm not sure I follow...

I have a resource file with the following tag and text:
MsgHelloWorld "Hello\r\nWorld"

I then retrieve the resource with a resource manager like this:
resMan = new ResourceManager( ... )
string msg = resMan.GetString("MsgHelloWorld");
MessageBox.Show(msg);

This will print "Hello\r\nWorld", but I want it to print:
"Hello
World"

You really shouldn't add the new lines programmatically - because when
you come to localize your application to another language you may want
to have the line breaks in different positions. The best way is to
include the new lines in your actual resources. You can do this in
one of two ways:

1. Open the resx file in the VS designer and use Shift+Enter when you
want want a line break. You will need to resize the row using the
grab bars to make it big enough to see multiple lines.

2. Open the resx file as code and add the line breaks directly in the
XML.

The Visual Studio Resource editor really is fairly basic and quite
irritating to use for large amounts of text when localizing so you
could also consider using a tool like our Globalizer.NET that allows
you to see and edit all your resources (for all languages) in a single
easy to edit form (see http://www.infralution.com/globalizer.html).

Regards
Grant Frisken
Infralution
www.infralution.com

Globalizer.NET - makes localizing .NET Application easy
 
P

Peter Hartlen

ahh, damn, almost forgot, it's old trick. when u read from the resources,
you lost your escape sequece. u need to restore it. changing \\r on \r

the following code fix it

string str = Properties.Resources.MsgHelloWorld;
str = str.Replace("\\n", "\n");
str = str.Replace("\\r", "\r");

Hello Michael, thanks for your reply.

Using this technique I assume you could use any "unique character set" to
represent the various escape sequences. So I could write something like this
in my resource file:

"HelloBlaBlaWorld" and then use

str = str.Replace("BlaBla","\n");

However, I'm not really fond of this solution, as it could come to a
situation where a string is "newlined" in one language and not in another
language. Also it provides a rather large amount of extra code...

Regards,

Peter
 
P

Peter Hartlén

You really shouldn't add the new lines programmatically - because when
you come to localize your application to another language you may want
to have the line breaks in different positions. The best way is to
include the new lines in your actual resources. You can do this in
one of two ways:

1. Open the resx file in the VS designer and use Shift+Enter when you
want want a line break. You will need to resize the row using the
grab bars to make it big enough to see multiple lines.

Perfect! Thanks!

/ Peter
 
D

Deepankar S

Dim resReader As ResourceReader = Nothing
Dim dicEnumerator As IDictionaryEnumerator = Nothing
Dim keyValuePair As StringBuilder

resReader = New ResourceReader(path)
dicEnumerator = resReader.GetEnumerator()

While dicEnumerator.MoveNext()
'Environment.NewLine is the new line char most appropriate for the 'environment
keyValuePair.Append(dicEnumerator.Key + "=" + dicEnumerator.Value.ToString().Replace("\n", Environment.NewLine))
End While

As you can see that we have replaced \n coming as part of resource string by Environment.NewLine. Similar approach will work in C#.

Regards,
Deepankar
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top