I have used the following style of schema for multi-lingual support:
+---------------+
| CATEGORIES_B |
+---------------+
| category_id |
| category_code |
| ... |
+---------------+
|
|
+-------------------------+
| CATEGORIES_T | +---------------+
+-------------------------+ | LANGUAGES |
| category_id | +---------------+
| translation_language_id |----| language_id |
| category_name | | language_code |
| category_description | +---------------+
| ... | | |
+-------------------------+ | |
| | |
| | |
+-------------------------+ | |
| CATEGORIES_L | | |
+-------------------------+ | |
| category_id | | |
| language_id |----------+ |
| translation_language_id |--------------+
+-------------------------+
LANGUAGES contains all the languages that you wish to support in your application, it has a primary key of language_id:
1 ENG
2 FRA
3 ESP
CATEGORIES_B contains the non-translatable attributes of each category, it has a primary key of category_id:
1 DBDES
A record would be inserted into CATEGORIES_T for each available translation, it has a compound primary key of category_id and translation_language_id:
1(DBDES) 1(ENG) Database Design The logical and/or physical design of a database
A record would be inserted into CATEGORIES_L for each supported language; indicating this was the translation to use; it has a compound primary key of category_id and language_id:
1(DBDES) 1(ENG) 1(ENG)
1(DBDES) 2(FRA) 1(ENG)
1(DBDES) 3(ESP) 1(ENG)
CATEGORIES_L should contain every value in the Cartesian Product of CATEGORIES_B and LANGUAGES.
As the translations became available the records in the CATEGORIES_T and CATEGORIES_L tables would be amended as appropriate:
1(DBDES) 1(ENG) Database Design The logical and/or physical design of a database
1(DBDES) 2(FRA) Database Design La conception logique et/ou physique d'une base de données
1(DBDES) 1(ENG) 1(ENG)
1(DBDES) 2(FRA) 2(FRA)
1(DBDES) 3(ESP) 1(ENG)
And eventually:
1(DBDES) 1(ENG) Database Design The logical and/or physical design of a database
1(DBDES) 2(FRA) Database Design La conception logique et/ou physique d'une base de données
1(DBDES) 3(ESP) Diseño de base de datos El diseño lógico y/o física de una base de datos
1(DBDES) 1(ENG) 1(ENG)
1(DBDES) 2(FRA) 2(FRA)
1(DBDES) 3(ESP) 3(ESP)
I have used this method when I did not have every translation available at the time the category information was to be inserted. It also indicated, when multiple but not all translations were available, which translation should be used for each language.