I'm still pretty new to asp.net web forms. I have a requirement to make app available in two languages. Everything that has to be translated is static content. Can you point me to good reading resource on this topic or perhaps explain shortly how is this best done?
Video tutorial from microsoft asp.net team : http://www.asp.net/web-forms/videos/how-do-i/how-do-i-create-a-multi-lingual-site-with-localization
Here is another useful link : http://weblogs.asp.net/sreejukg/archive/2010/11/23/multi-lingual-web-applications-using-asp-net-4.aspx
The articles that were listed in the other answers are all great resources.
Here is a quick summary of some things to consider:
- Any static text that will be "user facing" should be stored in resource files. In ASP .NET these files typically take the form of .resx files where the name of the file corresponds to the name of the page in which it is consumed. There are plenty of great articles out there for how to create and maintain these files. For each new language needed, you create a separate ..resx file. So if your "default" English text for a page is stored in 'MyPage.aspx.resx', you would store the Brazilian Portuguese translation in 'MyPage.aspx.pt-BR.resx'.
- When creating your "default" resource entries (sometimes referred to as messages), it's important to try and keep your messages organized as complete sentences/thoughts, as those will be easier to translate to other languages. There are some great general guidelines for structuring localizable messages on the mediawiki.org site: MediaWiki - Internationalization Hints
- You'll want to be very careful with respect to things like date and number parsing and formatting. The .NET framework provides good facilities for parsing and formatting dates and numbers in a variety of different cultural contexts. Most .Parse and .Format methods accept an instance of the CultureInfo class that it can use to inform .NET about how the number or date should be formatted.
- Related to the above: I've found it easier to prefer ISO-friendly date formats whenever possible. Most people that see: '2010-03-05' would know that it represents March 5, 2010 while '03-05-2010' could be interpreted as March 5, 2010 or May 3, 2010, depending on where you're from. Again, the .NET framework provides facilities for you to properly format this date based on the culture preferences of the current user, but I've often found it easier to just pick a standard format that is internationally recognized whenever possible to make your life easier.
These are very high-level guidelines and there are a lot of other things to take into consideration when localizing software. I definitely recommend that you check out the articles linked in other answers, but some of the stuff I've listed above have bitten me in the past.