Assignment Manager is a student computer science project submittal and tracking software product written in C# Microsoft ships with the Academic SKU of Visual Studio. My firm was contracted by Microsoft to build the original Assignment Manager in early 2000-before .Net was even released. It was intended to serve as an example of how best to compile a solution of this nature. The product has since become shared source and has changed somewhat.
From the official description:
The Assignment Manager enables faculty to manage courses, track assignments, notify students of grades as well as student modules. And the Visual Studio .Net Academic Tools Source Licensing Program gives academic users access to source code for the Assignment Manager Server, Assignment Manager Faculty Client and Assignment Manager Student Client.
Assignment Manager was architected up front to support internationalization (or globalization) and unlimited localizations (languages). We began by utilizing dynamic label controls within user interfaces instead of hard-coding English strings.
All string output dynamically pulled from a satellite assembly. A satellite assembly houses translated strings referenced by a code (e.g. LOGIN_INPUT_LABEL = "click here to login"). An assembly exists to house strings for each supported language. In the previous example, the string supports United States English (en-US). To support Spain Spanish (es-ES), the string might resemble "chasque aquí a la conexión". This string would have the same identifier (LOGIN_INPUT_LABEL) as en-US but reside in a separate satellite assembly and obviously have a different value. .Net provides a facility called a ResourceManager to interrogate the target culture / language and retrieve the appropriate string from the associated satellite assembly.
(Note: because Assignment Manager is a product targeted to a single university setting, the language preference is chosen during installation. In contrast, a public web site providing multiple language support would want to expose this as a choice to the browsing user. )
Next, we utilized internationalization-aware formatting for all numeric, currency, and date output. Using the culture / language preference chosen by the end user, the solution leveraged facilities within .Net to output using the correct format. For example, a date of "2/17/2006" within the United States should appear as "17/2/2006" within the UK because they prefer the month appear before the day.
Next, we configured our ASP.Net pages to support Unicode setting their encoding to UTF-8. This enables the browser to support non-ASCII characters such as a Spanish upside down question mark. Or a letter with a tilde mark.
For maintaining dynamic content, we supplied an administrative interface which supported the input and output of Unicode characters. Therefore, regardless of the language or characters input, our ASP.Net facilities and SQL Server backend stored and retrieved content in it's original format. For content such as a new assignment, a professor could enter text using any language / character set and this would be saved into the database. When it came time for a student to retrieve content, that content was simply retrieved from the database and rendered in the browser without modification. If Spanish were input by the administrator, Spanish would output to the student.
To achieve the actual translated content, we utilized a 3rd party firm. This firm maintained resources adept at all the languages we needed to support. We simply shipped them the human-readable list of strings (the en-US satellite assembly) and they would return the list formatted exactly the same but with all strings translated. The strings were then compiled and available for use within the ASP.Net solution.
Finally, once the application was localized and internationalized, we again leveraged a 3rd party firm to review each and every page for each language / culture to ensure content appeared correctly for that language / culture. Because our team possessed at most command of two languages, we would not have known if a particular language / culture was not appearing correctly.