Sql – Localizing data in SQL Server 2008 tables and sorting

localizationsqlsql-server-2008

I need to localize data in tables in a SQL Server 2008 database. Each language will need its own sort order when selecting records. I was told in another thread that creating separate tables for each language would make it nearly impossible to create the select statement in a Stored Proc. to return the records for a culture. However, how do I allow for different sort orders if I put all the data in a single table with different rows for each language? I would not have separate columns for each language but instead multiple rows. Can the select statement used to pull the records have a sort order associated with it or does it have to be stored for the table or column?

Best Solution

I suggest you create your localised tables with additional column called ie. Locale that will store language. Since all data will ALWAYS be contained in the same columns, there won't be any need for different sort orders (unless users actually need different order by data or asc/desc... Anyway:

Sample table:

ID | Name | Description | Locale
--------------------------------
1    Me     This is me    en
2    Ich    Das bin ich   de
3    You    This is you   en
4    Du     Das bist du   de
....

Your sort order will stay the same. All you gain is an additional where clause

select ID,
       [Name],
       Description
from SampleTable
where Locale = 'en'
order by [Name]

To make things even better I'd normalize these tables by creating a Lookup table with Culture locale abreviations that other tables (like this one I created) would use by foreign keys.