My applications store all localized text in a string resource dictionary as suggested here http://msdn.microsoft.com/en-us/library/bb295251(VS.85).aspx
UPDATE: updated answer - better option
The XAML parser normalized whitespace according to the following rules.
http://msdn.microsoft.com/en-us/library/cc189036(VS.95).aspx#whitespace
To instruct your sys:String
to preserve whitespace, apply xml:space="preserved
to it:
<sys:String x:Key="MyLocalizedString" xml:space="preserve">this is my resource</sys:String>
When you are entering a string resource in the resource view you can add CR/LF by hitting Shift + Enter. It will add the newline and you'll be able to see it. Retrieving the resource string and setting it as text on the text block will then yield the desired effect of reproducing the newline (or multiple newlines). In my case I wanted to simulate two paragraphs in a single text block. I didn't like the other approaches because it required the translation into another language to deal with two strings. I wanted to treat this as a single string resource so that the translator had the full context of what they were translating.
So, it's obviously been a while but for those in my situation perhaps this will help. In my case, I had a stand-alone XML resource file where I was already using ...
var strVal = (string)Application.Current.FindResource(key);
return strVal;
... within my own helper class to load the resource string. So for me the simplest solution was to just insert a call to Replace as follows:
var strVal = (string)Application.Current.FindResource(key);
strVal = strVal.Replace(@"\n", Environment.NewLine);
return strVal;
My example from my StringResources.xaml allows me to use the escape character \n as follows....
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Key="resKeyValue1">The source field "{0}" is already mapped to the destination field "{1}".\n\n
Do you want to additionally map the source field "{0}" to the destination field "{2}"?</system:String>
...
</ResourceDictionary>