diff --git a/openerp/addons/base/base.sql b/openerp/addons/base/base.sql
index 7084148885b..c0fd67ea56c 100644
--- a/openerp/addons/base/base.sql
+++ b/openerp/addons/base/base.sql
@@ -28,12 +28,16 @@ CREATE TABLE ir_model_fields (
model varchar NOT NULL,
model_id integer references ir_model on delete cascade,
name varchar NOT NULL,
- relation varchar,
- select_level varchar,
- field_description varchar,
- ttype varchar,
state varchar default 'base',
+ field_description varchar,
+ help varchar,
+ ttype varchar,
+ relation varchar,
relation_field varchar,
+ select_level varchar,
+ readonly boolean default False,
+ required boolean default False,
+ selectable boolean default False,
translate boolean default False,
serialization_field_id integer references ir_model_fields on delete cascade,
primary key(id)
diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py
index 85d247bc7b9..c3ba59f4f71 100644
--- a/openerp/addons/base/ir/ir_model.py
+++ b/openerp/addons/base/ir/ir_model.py
@@ -395,6 +395,7 @@ class ir_model_fields(osv.osv):
# static table of properties
model_props = [ # (our-name, fields.prop, set_fn)
('field_description', 'string', tools.ustr),
+ ('help', 'help', lambda s: s and tools.ustr(s) or None),
('required', 'required', bool),
('readonly', 'readonly', bool),
('domain', 'domain', eval),
@@ -404,6 +405,9 @@ class ir_model_fields(osv.osv):
('select_level', 'index', lambda x: bool(int(x))),
('selection', 'selection', eval),
]
+ if context.get('lang') not in (None, 'en_US'):
+ # do not patch registry with translations of field string and help
+ model_props = model_props[2:]
if vals and ids:
checked_selection = False # need only check it once, so defer
diff --git a/openerp/addons/base/ir/ir_model_view.xml b/openerp/addons/base/ir/ir_model_view.xml
index 1b6c46083f4..a62b8518eda 100644
--- a/openerp/addons/base/ir/ir_model_view.xml
+++ b/openerp/addons/base/ir/ir_model_view.xml
@@ -53,10 +53,15 @@