Sorry but I politely wish to disagree. Please be aware that I am looking on this problem from a developer perspective. It is easy to tell end users with no development skills to create multiple sites and type a lot of text, but as a developer I hate to repeat myself in terms of re-specifying the same layout which is over-redundant when the only thing I want to change is string resources. The problem is aggravated the more cultures you add (you are effectively advocating an expotential growth of "sites" that are spawned for localization purposes the more "fundamental" sites there are) and the less non-string differences there are. In our case, users would be happy with no change in layout or style whatsoever.
Why wouldn't it be nice to let the web site remember the language and culture profile of a user?
There are many use cases I experienced myself, e.g. using web kiosks, using hotel PCs, using a friend's PC, all cases where the browser and OS language is different from the USER. Millions of people are in these situations. Think of logging in to your e-mail account from a hotel PC in France. The browser/OS is French, but you want it to display in English, right? And surely they blocked the browser control panel. There is so much culture-dependant code that must work based on who the user is, e.g. date formatting, time formatting, when listing e-mail messages.
Ultimately the problem is an impedance mismatch between the three models of localization:
1. Database-based (e.g. "sites", "pages" etc)
2. Resource-based (resx)
3. Framework-based (e.g. formatting, currencies)
Even with a good effort, we always end up with half-baked solutions, e.g. an English site displaying French dates or vice versa when these models mix together.
Fundamentally the best solution would be to be able to use resource files in the pages themselves. I really want to fork out a simple hack to the source code to enable this. Specifically, every time there is an opportunity to enter something which becomes HTML, e.g. a page title, or HTML control content, the system should automatically interpret and inject thread culture-aware resource tags which comes from RESX, as in standard .NET practice. The standard tag is: <%$ Resources:MyResource, MyResourceKey%>.
So instead of typing "Home", "News", "Forum", etc. at the header and then copying the whole site, I gradually migrate by replacing english terms with resource tags. There could also be a feature to auto-migrate all static strings to a resource file to get started easily, which could give nice keys, e.g. Page_Control_CamelCaseAbbreviation or something.
OR: alternatively, for every "string" field, you allow culturally sensitive options to be specified, in the database level. E.g. instead of directly storing a string, you store a resource key. Thus, the site needs to have a resource manager.
Then, there would be a hierarchy of preference overrides on the thread culture, e.g. by-profile (not avilable!), by-browser (OK now), by-site (OK now by forced web.config override), or even by-page.
From a coding viewpoint, the portal system should make thread culture the primary way to translate a site and move away from the data-centric orientation on some specific tables. It is the only reliable and fully framework-supported way to ensure that translation is nested down to any level of call depth in any controls. I would consider the database-based approach as a "draft" of a web site before globalizing it. I have tonnes of re-used DLL assemblies across various controls on the page, visited by multiple threads of multiple users. The thread culture is really my only friend in ensuring the correct behavior.