diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql index 17378061b29..80384a9e327 100644 --- a/openerp/addons/base/base.sql +++ b/openerp/addons/base/base.sql @@ -314,6 +314,12 @@ CREATE TABLE res_company ( primary key(id) ); +CREATE TABLE res_lang ( + id serial PRIMARY KEY, + name VARCHAR(64) NOT NULL UNIQUE, + code VARCHAR(16) NOT NULL UNIQUE +); + CREATE TABLE ir_model_data ( id serial NOT NULL, create_uid integer, diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 7580b4da185..11a5c248d23 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -62,8 +62,12 @@ class ir_translation(osv.osv): 'src': fields.text('Source'), 'value': fields.text('Translation Value'), } + + _sql_constraints = [ ('lang_fkey_res_lang', 'FOREIGN KEY(lang) REFERENCES res_lang(code)', + 'Language code of translation item must be among known languages' ), ] - def _auto_init(self, cr, context={}): + + def _auto_init(self, cr, context=None): super(ir_translation, self)._auto_init(cr, context) # FIXME: there is a size limit on btree indexed values so we can't index src column with normal btree. @@ -88,7 +92,11 @@ class ir_translation(osv.osv): cr.execute('CREATE INDEX ir_translation_ltn ON ir_translation (name, lang, type)') cr.commit() - + def _check_selection_field_value(self, cr, uid, field, value, context=None): + if field == 'lang': + return + return super(ir_translation, self)._check_selection_field_value(cr, uid, field, value, context=context) + @tools.cache(skiparg=3, multi='ids') def _get_ids(self, cr, uid, name, tt, lang, ids): translations = dict.fromkeys(ids, False)