I am using the ASP.NET framework and C#. Their recommendation as to how
to deliver translations seems to concurr with your idea. Have the UI do
it, not the database. They use "satellite assembly" for each langage
supported. A satellite assembly is just a DLL which contains an XML
file. The XML file contains name+value pairs, the name identify the
string to translate (Ex: MSG_ERROR_1) and the value the translation.
This works great when each message can be identified: BUTTON_1_TEXT,
LABEL_2_TEXT....as GUI elements, but in my case the users of the site
will be entering the value in the table row, so no name value pairs
there.
I think now the simplier solution will be to maintain a language table:
lang = { id, code } ("fr", "en"...), and add force the insertor of a
row to specify the lang code: cars = {id, lang_id, name}, and use
another table to store the various translation: cars_tr = {id, lang_id,
name}, then I need to join only if a Web user specifies a particular
language, or a translation.