[orm-devel] How to handle multi language?

Werner F. Bruhin werner.bruhin at free.fr
Fri Jun 17 21:12:27 CEST 2005

Hi Diedrich,

All your suggestions got me thinking.  Whenever you or anyone else has a 
moment to look at the attached, I would be greatful for comments/critics 
- this is nothing urgent.

So, I thought why not use a kind of a relation?  I put something 
together roughly based on the many2one relationship, it only allows for 
"get"ing language specific data.

I am not sure if this approach would hold up some serious testing/usage.

I basically created a "lang2one" relationship, it allows to define a 
default language and a preferred language, if later is found the data 
for it is returned, otherwise the data for the default language is returned.

I don't think that the naming of attributes etc I choose is that good.  
I am not that happy with all these fields defined for the country table, 
initially I had a setLanguage method in the lang2one relation but 
couldn't make it work.

Files attached:
relationships.py - this lives in adapter/firebird (if a generic solution 
is agreed on/found it should live in orm/relationships.py)
lang2one* - live in examples/firebird

Any hints, comments, critic (but be nice, please!) is very welcome

Diedrich Vorberg wrote:

> Hi Werner!
>> My application supports multiple languages (en, de, fr), my current  
>> implementation works but I think there is "space for improvement"  
>> and I am looking for some hints/suggestions on how to do this.
>> Thanks in advance for any ideas and/or hints.
> I've got an idea I used for a web application, It's not ideal,  
> though. I used one column per table per language like this:
>    CREATE TABLE something
>    (
>        title_de TEXT,
>        description_de TEXT,
>        title_en TEXT,
>        description_en TEXT
>    );
> I'm using Livinglogic's XIST XML handling library to create XHTML  
> output which represents the XHTML DOM tree using Python classes. I  
> inserted the relevant data into the dom tree with the HTML attribute  
> lang="" set to the correct language. Just previous to delivery I have  
> a little routine walk the DOM tree an delete all entries that do not  
> fit the user's language.
> If you are writing a GUI application you might want to create the  
> model-Module (the one with all the dbclasses in) on startup depending  
> on the user's language settings. Than you could mangle the columns  
> dicts according to the locale. Like this (just a code-sketch)
>    from orm.dbclass import dbclass
>    from orm.columns import *
>    from orm.firebird.columns import *
>    class something(dbclass):
>       pass
>    something_columns = ( ("title", text, "title_%s"),
>                          ("description", text, "description_%s"), )
>    class someting_else(dbclass):
>        pass
>    something_columns = ( ("blah", text, "blah_%s"),
>                          ("blub", text, "blub_%s"), )
>    # figure out my locale, determine language abriviation, store it  
> in lang variable
>    for class_name in ("something", "something_else"):
>       dbclass = locals()[class_name]
>       column_tuples = locals()[class_name]
>       columns_dict = {}
>       for attribute_name, column_class, sql_column_name in  
> column_tuples:
>          columns_dict[attribute_name] = column_class 
> (column_name="sql_column_name" % lang)
>       dbclass.columns = columns_dict
>    # now you can normaly instantiate something and something_else
> There is another idea I had: a dict_relationship that would let you  
> access different columns in a dbclass like a dict as in
>    dbobj.attribute[lang]
> which maps to SQL column dbobj's attribute_"lang"-column.
> Diedrich

-------------- next part --------------
A non-text attachment was scrubbed...
Name: relationships.py
Type: application/x-python
Size: 4787 bytes
Desc: not available
Url : http://mailman.tux4web.de/pipermail/orm-devel/attachments/20050617/09d60439/relationships-0001.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lang2one_relationship.py
Type: application/x-python
Size: 2617 bytes
Desc: not available
Url : http://mailman.tux4web.de/pipermail/orm-devel/attachments/20050617/09d60439/lang2one_relationship-0002.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lang2one_relationship.sql
Type: application/octetstream
Size: 3378 bytes
Desc: not available
Url : http://mailman.tux4web.de/pipermail/orm-devel/attachments/20050617/09d60439/lang2one_relationship-0003.bin

More information about the orm-devel mailing list