Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET: localize content with mixed HTML formatting

In my application I have paragraphs with mixed static text and HTML formatting and links. I'm looking for a good localization solution that keeps resources decoupled from markup. Let's say we have the following paragraph:

<p>Let's have a <a href="someURL">cup of coffee</a> and get <b>energized</b>.</p>

Using the standard resx solution forces me to embed the HTML markup and the link destinations in the resx string. This is bad because it couples markup/CSS/app structure with resources.

The next best thing is to split the paragraph such that localized content never contains markup. In the above example I would have 4 para fragments: 1) "Let's have a" as plain text 2) "cup of coffee" as a link 3) "and get" as plain text 4) "energized" as bold text

The problem with this solution is that fragmentation makes maintenace of resources a complete nightmare plus it forces a certain order of the paragraph fragments which might not fit the grammar of all cultures. For instance, in the translated language the proper translation might be

<p>Let's get <b>energized</b> with a <a href="someURL">cup of coffee</a>.</p>

I don't think I can quite get away with not embedding markup into resources and that might not be a huge deal. Using proper markup/CSS (span, div, id, class) I can create abstractions that would lessen the impact of coupling.

What do I do about the link URLs though? Thanks,

Stefan

like image 425
stefann Avatar asked Mar 08 '09 23:03

stefann


2 Answers

Don't view the HTML as "formatting", but as structure, and save all of it to a resource data store (such as resx, or a database, or xml files or something). Then you can stop worrying about little bits of text inside a paragraph. Instead, you'll have some reference to a resource called "paragraph_energized_with_coffee" or something, per locale, and whatever software you use to edit the resources will determine what flexibility editors have in structuring the html inside each resource.

like image 79
Rahul Avatar answered Oct 17 '22 20:10

Rahul


Do it like this:

<%= String.Format("Resources.MyResource.mydata","someURL") %>

and use this as your resource string:

<p>Let's have a <a href="{0}">cup of coffee</a> and get <b>energized</b>.</p> 
like image 41
Julian Avatar answered Oct 17 '22 20:10

Julian