diff --git a/openerp/__init__.py b/openerp/__init__.py
index 9026c7be90f..7e723c41f9d 100644
--- a/openerp/__init__.py
+++ b/openerp/__init__.py
@@ -22,6 +22,8 @@
""" OpenERP core library.
"""
+# The hard-coded super-user id (a.k.a. administrator, or root user).
+SUPERUSER_ID = 1
import addons
import conf
diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml
index f3c305fb789..1243331272f 100644
--- a/openerp/addons/base/base_data.xml
+++ b/openerp/addons/base/base_data.xml
@@ -1002,7 +1002,7 @@
- OpenERP S.A.
+ Company Name
@@ -1010,13 +1010,13 @@
- Fabien Pinckaers
- Chaussee de Namur 40
- 1367
- Gerompont
- (+32).81.81.37.00
+ Company contact name
+ Company street, number
+ Company zip
+ Company city
+ +1-212-555-12345
default
-
+
@@ -1038,19 +1038,14 @@
- OpenERP S.A.
+ Company Name
- Free Business Solutions
- Web: http://www.openerp.com - Tel: (+32).81.81.37.00 - Bank: CPH 126-2013269-07
- IBAN: BE74 1262 0132 6907 - SWIFT: CPHBBE75 - VAT: BE0477.472.701
+ Company business slogan
+ Web: www.companyname.com - Tel: +1-212-555-12345
+ IBAN: XX12 3456 7890 1234 5678 - SWIFT: SWIFTCODE - VAT: Company vat number
-
-
- OpenERP S.A.
-
-
Administrator
diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po
new file mode 100644
index 00000000000..75dd21f04ff
--- /dev/null
+++ b/openerp/addons/base/i18n/zh_HK.po
@@ -0,0 +1,9248 @@
+# Chinese (Hong Kong) translation for openobject-server
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-server package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-server\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-09-27 16:39+0000\n"
+"Last-Translator: Walter Cheuk \n"
+"Language-Team: Chinese (Hong Kong) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-28 05:19+0000\n"
+"X-Generator: Launchpad (build 14049)\n"
+
+#. module: base
+#: view:ir.filters:0
+#: field:ir.model.fields,domain:0
+#: field:ir.rule,domain:0
+#: field:ir.rule,domain_force:0
+#: field:res.partner.title,domain:0
+msgid "Domain"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sh
+msgid "Saint Helena"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+msgid "Other Configuration"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "DateTime"
+msgstr ""
+
+#. module: base
+#: code:addons/fields.py:534
+#, python-format
+msgid ""
+"The second argument of the many2many field %s must be a SQL table !You used "
+"%s, which is not a valid SQL table name."
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+#: field:ir.values,meta_unpickle:0
+msgid "Metadata"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view,arch:0
+#: field:ir.ui.view.custom,arch:0
+msgid "View Architecture"
+msgstr ""
+
+#. module: base
+#: field:base.language.import,code:0
+msgid "Code (eg:en__US)"
+msgstr ""
+
+#. module: base
+#: view:workflow:0
+#: view:workflow.activity:0
+#: field:workflow.activity,wkf_id:0
+#: field:workflow.instance,wkf_id:0
+#: field:workflow.transition,wkf_id:0
+#: field:workflow.workitem,wkf_id:0
+msgid "Workflow"
+msgstr ""
+
+#. module: base
+#: view:partner.sms.send:0
+msgid "SMS - Gateway: clickatell"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Hungarian / Magyar"
+msgstr ""
+
+#. module: base
+#: selection:ir.model.fields,select_level:0
+msgid "Not Searchable"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (VE) / Español (VE)"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,wkf_model_id:0
+msgid "Workflow On"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,display_menu_tip:0
+msgid "Display Menu Tips"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Created Views"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:485
+#, python-format
+msgid ""
+"You can not write in this document (%s) ! Be sure your user belongs to one "
+"of these groups: %s."
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,domain:0
+msgid ""
+"The optional domain to restrict possible values for relationship fields, "
+"specified as a Python expression defining a list of triplets. For example: "
+"[('color','=','red')]"
+msgstr ""
+
+#. module: base
+#: field:res.partner,ref:0
+msgid "Reference"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,target:0
+msgid "Target Window"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:507
+#, python-format
+msgid "Warning!"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:304
+#, python-format
+msgid ""
+"Properties of base fields cannot be altered in this manner! Please modify "
+"them through Python code, preferably through a custom addon!"
+msgstr ""
+
+#. module: base
+#: code:addons/osv.py:133
+#, python-format
+msgid "Constraint Error"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_ui_view_custom
+msgid "ir.ui.view.custom"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sz
+msgid "Swaziland"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1993
+#: code:addons/orm.py:3653
+#, python-format
+msgid "created."
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_woodsuppliers0
+msgid "Wood Suppliers"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:303
+#, python-format
+msgid ""
+"Some installed modules depend on the module you plan to Uninstall :\n"
+" %s"
+msgstr ""
+
+#. module: base
+#: field:ir.sequence,number_increment:0
+msgid "Increment Number"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_res_company_tree
+#: model:ir.ui.menu,name:base.menu_action_res_company_tree
+msgid "Company's Structure"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+msgid "Search Partner"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:132
+#, python-format
+msgid "\"smtp_server\" needs to be set to send mails to users"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_export_language.py:60
+#, python-format
+msgid "new"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,multi:0
+msgid "On multiple doc."
+msgstr ""
+
+#. module: base
+#: field:ir.module.category,module_nr:0
+msgid "Number of Modules"
+msgstr ""
+
+#. module: base
+#: help:multi_company.default,company_dest_id:0
+msgid "Company to store the current record"
+msgstr ""
+
+#. module: base
+#: field:res.partner.bank.type.field,size:0
+msgid "Max. Size"
+msgstr ""
+
+#. module: base
+#: field:res.partner.address,name:0
+msgid "Contact Name"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_export_language.py:56
+#, python-format
+msgid ""
+"Save this document to a %s file and edit it with a specific software or a "
+"text editor. The file encoding is UTF-8."
+msgstr ""
+
+#. module: base
+#: sql_constraint:res.lang:0
+msgid "The name of the language must be unique !"
+msgstr ""
+
+#. module: base
+#: selection:res.request,state:0
+msgid "active"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.wizard,wiz_name:0
+msgid "Wizard Name"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:2160
+#, python-format
+msgid "Invalid group_by"
+msgstr ""
+
+#. module: base
+#: field:res.partner,credit_limit:0
+msgid "Credit Limit"
+msgstr ""
+
+#. module: base
+#: field:ir.model.data,date_update:0
+msgid "Update Date"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+msgid "Owner"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,src_model:0
+msgid "Source Object"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.todo:0
+msgid "Config Wizard Steps"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_ui_view_sc
+msgid "ir.ui.view_sc"
+msgstr ""
+
+#. module: base
+#: field:res.widget.user,widget_id:0
+#: field:res.widget.wizard,widgets_list:0
+msgid "Widget"
+msgstr ""
+
+#. module: base
+#: view:ir.model.access:0
+#: field:ir.model.access,group_id:0
+#: view:res.config.users:0
+msgid "Group"
+msgstr ""
+
+#. module: base
+#: field:ir.exports.line,name:0
+#: field:ir.translation,name:0
+#: field:res.partner.bank.type.field,name:0
+msgid "Field Name"
+msgstr ""
+
+#. module: base
+#: wizard_view:server.action.create,init:0
+#: wizard_field:server.action.create,init,type:0
+msgid "Select Action Type"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tv
+msgid "Tuvalu"
+msgstr ""
+
+#. module: base
+#: selection:ir.model,state:0
+msgid "Custom Object"
+msgstr ""
+
+#. module: base
+#: field:res.lang,date_format:0
+msgid "Date Format"
+msgstr ""
+
+#. module: base
+#: field:res.bank,email:0
+#: field:res.partner.address,email:0
+msgid "E-Mail"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.an
+msgid "Netherlands Antilles"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:389
+#, python-format
+msgid ""
+"You can not remove the admin user as it is used internally for resources "
+"created by OpenERP (updates, module installation, ...)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gf
+msgid "French Guyana"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Greek / Ελληνικά"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Bosnian / bosanski jezik"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.report.xml,attachment_use:0
+msgid ""
+"If you check this, then the second time the user prints with same attachment "
+"name, it returns the previous report."
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:904
+#, python-format
+msgid "The read method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: help:res.lang,iso_code:0
+msgid "This ISO code is the name of po files to use for translations"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "Your system will be updated."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.todo,note:0
+#: selection:ir.property,type:0
+msgid "Text"
+msgstr ""
+
+#. module: base
+#: field:res.country,name:0
+msgid "Country Name"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.co
+msgid "Colombia"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Schedule Upgrade"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:838
+#, python-format
+msgid "Key/value '%s' not found in selection field '%s'"
+msgstr ""
+
+#. module: base
+#: help:res.country,code:0
+msgid ""
+"The ISO country code in two chars.\n"
+"You can use this field for quick search."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pw
+msgid "Palau"
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+msgid "Sales & Purchases"
+msgstr ""
+
+#. module: base
+#: view:ir.translation:0
+msgid "Untranslated"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,context:0
+msgid ""
+"Context dictionary as Python expression, empty by default (Default: {})"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_action_wizard
+#: view:ir.actions.wizard:0
+#: model:ir.ui.menu,name:base.menu_ir_action_wizard
+msgid "Wizards"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_miscellaneoussuppliers0
+msgid "Miscellaneous Suppliers"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:255
+#, python-format
+msgid "Custom fields must have a name that starts with 'x_' !"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,action_id:0
+msgid "Select the Action Window, Report, Wizard to be executed."
+msgstr ""
+
+#. module: base
+#: view:res.config.users:0
+msgid "New User"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid "Export done"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+msgid "Model Description"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,src_model:0
+msgid ""
+"Optional model name of the objects on which this action should be visible"
+msgstr ""
+
+#. module: base
+#: field:workflow.transition,trigger_expr_id:0
+msgid "Trigger Expression"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.jo
+msgid "Jordan"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Certified"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.er
+msgid "Eritrea"
+msgstr ""
+
+#. module: base
+#: view:res.config:0
+#: view:res.config.installer:0
+msgid "description"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_base_action_rule
+msgid "Automated Actions"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_actions
+msgid "ir.actions.actions"
+msgstr ""
+
+#. module: base
+#: view:partner.wizard.ean.check:0
+msgid "Want to check Ean ? "
+msgstr ""
+
+#. module: base
+#: field:ir.values,key2:0
+msgid "Event Type"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid ""
+"OpenERP translations (core, modules, clients) are managed through "
+"Launchpad.net, our open source project management facility. We use their "
+"online interface to synchronize all translations efforts."
+msgstr ""
+
+#. module: base
+#: field:res.partner,title:0
+msgid "Partner Form"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Swedish / svenska"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.rs
+msgid "Serbia"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Wizard View"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.kh
+msgid "Cambodia, Kingdom of"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_sequence_form
+#: view:ir.sequence:0
+#: model:ir.ui.menu,name:base.menu_ir_sequence_form
+#: model:ir.ui.menu,name:base.next_id_5
+msgid "Sequences"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_language_import
+msgid "Language Import"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_config_users
+msgid "res.config.users"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Albanian / Shqip"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_crm_config_opportunity
+msgid "Opportunities"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_language_export
+msgid "base.language.export"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pg
+msgid "Papua New Guinea"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.report.xml,report_type:0
+msgid "Report Type, e.g. pdf, html, raw, sxw, odt, html2html, mako2html, ..."
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_4
+msgid "Basic Partner"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid ","
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+msgid "My Partners"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+msgid "XML Report"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.es
+msgid "Spain"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_translation_export
+msgid "Import / Export"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,domain:0
+msgid ""
+"Optional domain filtering of the destination data, as a Python expression"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade
+#: model:ir.model,name:base.model_base_module_upgrade
+msgid "Module Upgrade"
+msgstr ""
+
+#. module: base
+#: view:res.config.users:0
+msgid ""
+"Groups are used to define access rights on objects and the visibility of "
+"screens and menus"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (UY) / Español (UY)"
+msgstr ""
+
+#. module: base
+#: field:res.partner,mobile:0
+#: field:res.partner.address,mobile:0
+msgid "Mobile"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.om
+msgid "Oman"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_payterm_form
+#: model:ir.model,name:base.model_res_payterm
+msgid "Payment term"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nu
+msgid "Niue"
+msgstr ""
+
+#. module: base
+#: selection:ir.cron,interval_type:0
+msgid "Work Days"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "Other OSI Approved Licence"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,context_lang:0
+#: help:res.users,context_lang:0
+msgid ""
+"Sets the language for the user's user interface, when UI translations are "
+"available"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1043
+#, python-format
+msgid "The unlink method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.act_menu_create
+#: view:wizard.ir.model.menu.create:0
+msgid "Create Menu"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.in
+msgid "India"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_request_link-act
+#: model:ir.ui.menu,name:base.menu_res_request_link_act
+msgid "Request Reference Types"
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "client_action_multi, client_action_relate"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ad
+msgid "Andorra, Principality of"
+msgstr ""
+
+#. module: base
+#: field:ir.module.category,child_ids:0
+#: field:res.partner.category,child_ids:0
+msgid "Child Categories"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_config_parameter
+msgid "ir.config_parameter"
+msgstr ""
+
+#. module: base
+#: selection:base.language.export,format:0
+msgid "TGZ Archive"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%B - Full month name."
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+#: field:ir.attachment,type:0
+#: field:ir.model,state:0
+#: field:ir.model.fields,state:0
+#: field:ir.property,type:0
+#: field:ir.server.object.lines,type:0
+#: field:ir.translation,type:0
+#: view:ir.ui.view:0
+#: view:ir.values:0
+#: field:ir.values,key:0
+#: view:res.partner:0
+#: view:res.partner.address:0
+msgid "Type"
+msgstr "類型"
+
+#. module: base
+#: code:addons/orm.py:210
+#, python-format
+msgid ""
+"Language with code \"%s\" is not defined in your system !\n"
+"Define it through the Administration menu."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gu
+msgid "Guam (USA)"
+msgstr "關島(美屬)"
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_hr_project
+msgid "Human Resources Dashboard"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:507
+#, python-format
+msgid "Setting empty passwords is not allowed for security reasons!"
+msgstr "因保安理由密碼不能留空!"
+
+#. module: base
+#: selection:ir.actions.server,state:0
+#: selection:workflow.activity,kind:0
+msgid "Dummy"
+msgstr ""
+
+#. module: base
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ky
+msgid "Cayman Islands"
+msgstr "開曼羣島"
+
+#. module: base
+#: model:res.country,name:base.kr
+msgid "South Korea"
+msgstr "南韓"
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_workflow_transition_form
+#: model:ir.ui.menu,name:base.menu_workflow_transition
+#: view:workflow.activity:0
+msgid "Transitions"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:4020
+#, python-format
+msgid "Record #%d of %s not found, cannot copy!"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,contributors:0
+msgid "Contributors"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "Char"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_publisher_warranty_contract_form
+#: model:ir.ui.menu,name:base.menu_publisher_warranty_contract
+msgid "Contracts"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (AR) / Español (AR)"
+msgstr "西班牙文 (AR) / Español (AR)"
+
+#. module: base
+#: model:res.country,name:base.ug
+msgid "Uganda"
+msgstr "烏干達"
+
+#. module: base
+#: field:ir.model.access,perm_unlink:0
+msgid "Delete Access"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ne
+msgid "Niger"
+msgstr "尼日爾"
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Chinese (HK)"
+msgstr "中文(香港)"
+
+#. module: base
+#: model:res.country,name:base.ba
+msgid "Bosnia-Herzegovina"
+msgstr "波斯尼亞"
+
+#. module: base
+#: view:base.language.export:0
+msgid ""
+"To improve or expand the official translations, you should use directly "
+"Lauchpad's web interface (Rosetta). If you need to perform mass translation, "
+"Launchpad also allows uploading full .po files at once"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (GT) / Español (GT)"
+msgstr "西班牙文 (GT) / Español (GT)"
+
+#. module: base
+#: view:res.lang:0
+msgid ""
+"%W - Week number of the year (Monday as the first day of the week) as a "
+"decimal number [00,53]. All days in a new year preceding the first Monday "
+"are considered to be in week 0."
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,website:0
+#: field:res.partner,website:0
+msgid "Website"
+msgstr "網站"
+
+#. module: base
+#: model:res.country,name:base.gs
+msgid "S. Georgia & S. Sandwich Isls."
+msgstr "南喬治亞和南三文治羣島"
+
+#. module: base
+#: field:ir.actions.url,url:0
+msgid "Action URL"
+msgstr ""
+
+#. module: base
+#: field:base.module.import,module_name:0
+msgid "Module Name"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mh
+msgid "Marshall Islands"
+msgstr "馬紹爾羣島"
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:328
+#, python-format
+msgid "Changing the model of a field is forbidden!"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ht
+msgid "Haiti"
+msgstr "海地"
+
+#. module: base
+#: view:ir.ui.view:0
+#: selection:ir.ui.view,type:0
+msgid "Search"
+msgstr "搜尋"
+
+#. module: base
+#: code:addons/osv.py:136
+#, python-format
+msgid ""
+"The operation cannot be completed, probably due to the following:\n"
+"- deletion: you may be trying to delete a record while other records still "
+"reference it\n"
+"- creation/update: a mandatory field is not correctly set"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid ""
+"2. Group-specific rules are combined together with a logical AND operator"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:206
+#, python-format
+msgid "Operation Canceled"
+msgstr ""
+
+#. module: base
+#: help:base.language.export,lang:0
+msgid "To export a new language, do not select a language."
+msgstr ""
+
+#. module: base
+#: view:res.request:0
+msgid "Request Date"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_hr_dasboard
+msgid "Dashboard"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_purchase_root
+msgid "Purchases"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.md
+msgid "Moldavia"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Features"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+#: report:ir.module.reference.graph:0
+msgid "Version"
+msgstr ""
+
+#. module: base
+#: view:ir.model.access:0
+#: field:ir.model.access,perm_read:0
+#: view:ir.rule:0
+msgid "Read Access"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_exports
+msgid "ir.exports"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_update_translations.py:38
+#, python-format
+msgid "No language with code \"%s\" exists"
+msgstr ""
+
+#. module: base
+#: code:addons/base/publisher_warranty/publisher_warranty.py:163
+#, python-format
+msgid "Error during communication with the publisher warranty server."
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,email:0
+msgid ""
+"Provides the fields that will be used to fetch the email address, e.g. when "
+"you select the invoice, then `object.invoice_address_id.email` is the field "
+"which gives the correct address"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%Y - Year with century."
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "-"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract.wizard:0
+msgid ""
+"This wizard helps you register a publisher warranty contract in your OpenERP "
+"system. After the contract has been registered, you will be able to send "
+"issues directly to OpenERP."
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1744
+#, python-format
+msgid "The search method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: view:wizard.ir.model.menu.create:0
+msgid "Create _Menu"
+msgstr ""
+
+#. module: base
+#: field:res.payterm,name:0
+msgid "Payment Term (short name)"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_bank
+#: view:res.bank:0
+#: field:res.partner.bank,bank:0
+msgid "Bank"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_exports_line
+msgid "ir.exports.line"
+msgstr ""
+
+#. module: base
+#: help:base.language.install,overwrite:0
+msgid ""
+"If you check this box, your customized translations will be overwritten and "
+"replaced by the official ones."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_rml:0
+msgid "Main report file path"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_action_report_xml
+#: field:ir.module.module,reports_by_module:0
+#: model:ir.ui.menu,name:base.menu_ir_action_report_xml
+msgid "Reports"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window.view,multi:0
+#: help:ir.actions.report.xml,multi:0
+msgid ""
+"If set to true, the action will not be displayed on the right toolbar of a "
+"form view."
+msgstr ""
+
+#. module: base
+#: field:workflow,on_create:0
+msgid "On Create"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:607
+#, python-format
+msgid ""
+"'%s' contains too many dots. XML ids should not contain dots ! These are "
+"used to refer to other modules data, as in module.reference_id"
+msgstr ""
+
+#. module: base
+#: field:partner.sms.send,user:0
+#: field:res.config.users,login:0
+#: field:res.users,login:0
+msgid "Login"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid ""
+"Access all the fields related to the current object using expressions, i.e. "
+"object.partner_id.name "
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_country_state
+msgid "Country state"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "Float"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_request_link
+msgid "res.request.link"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.wizard,name:0
+msgid "Wizard Info"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+#: model:ir.actions.act_window,name:base.action_wizard_lang_export
+#: model:ir.ui.menu,name:base.menu_wizard_lang_export
+msgid "Export Translation"
+msgstr ""
+
+#. module: base
+#: help:res.log,secondary:0
+msgid ""
+"Do not display this log if it belongs to the same object the user is working "
+"on"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tp
+msgid "East Timor"
+msgstr ""
+
+#. module: base
+#: model:res.company,follow_up_msg:base.main_company
+msgid ""
+"Date : %(date)s\n"
+"\n"
+"Dear %(partner_name)s,\n"
+"\n"
+"Please find in attachment a reminder of all your unpaid invoices, for a "
+"total amount due of:\n"
+"\n"
+"%(followup_amount).2f %(company_currency)s\n"
+"\n"
+"Thanks,\n"
+"--\n"
+"%(user_signature)s\n"
+"%(company_name)s"
+msgstr ""
+
+#. module: base
+#: field:res.currency,accuracy:0
+msgid "Computational Accuracy"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Sinhalese / සිංහල"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_wizard_ir_model_menu_create_line
+msgid "wizard.ir.model.menu.create.line"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,res_id:0
+msgid "Attached ID"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Day: %(day)s"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mv
+msgid "Maldives"
+msgstr "馬爾代夫"
+
+#. module: base
+#: help:ir.values,res_id:0
+msgid "Keep 0 if the action must appear on all resources."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_rule
+msgid "ir.rule"
+msgstr ""
+
+#. module: base
+#: selection:ir.cron,interval_type:0
+msgid "Days"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,condition:0
+msgid ""
+"Condition that is to be tested before action is executed, e.g. "
+"object.list_price > object.cost_price"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/partner/partner.py:155
+#: code:addons/base/res/res_company.py:66
+#, python-format
+msgid " (copy)"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "7. %H:%M:%S ==> 18:25:20"
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+#: view:res.partner.category:0
+#: field:res.partner.category,partner_ids:0
+msgid "Partners"
+msgstr ""
+
+#. module: base
+#: field:res.partner.category,parent_left:0
+msgid "Left parent"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_widget_act_window
+#: model:ir.ui.menu,name:base.menu_res_widget_act_window
+msgid "Homepage Widgets"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,message:0
+msgid ""
+"Specify the message. You can use the fields from the object. e.g. `Dear [[ "
+"object.partner_id.name ]]`"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,res_model:0
+msgid "Attached Model"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid "Domain Setup"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,trigger_name:0
+msgid "Trigger Name"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_model_access
+msgid "ir.model.access"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,priority:0
+#: field:res.request,priority:0
+#: field:res.request.link,priority:0
+msgid "Priority"
+msgstr ""
+
+#. module: base
+#: field:workflow.transition,act_from:0
+msgid "Source Activity"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Legend (for prefix, suffix)"
+msgstr ""
+
+#. module: base
+#: selection:ir.server.object.lines,type:0
+msgid "Formula"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:389
+#, python-format
+msgid "Can not remove root user!"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mw
+msgid "Malawi"
+msgstr "馬拉維"
+
+#. module: base
+#: code:addons/base/res/res_user.py:51
+#: code:addons/base/res/res_user.py:413
+#, python-format
+msgid "%s (copy)"
+msgstr ""
+
+#. module: base
+#: field:res.partner.address,type:0
+msgid "Address Type"
+msgstr ""
+
+#. module: base
+#: view:ir.ui.menu:0
+msgid "Full Path"
+msgstr "完整路徑"
+
+#. module: base
+#: view:res.request:0
+msgid "References"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid ""
+"%U - Week number of the year (Sunday as the first day of the week) as a "
+"decimal number [00,53]. All days in a new year preceding the first Sunday "
+"are considered to be in week 0."
+msgstr ""
+
+#. module: base
+#: view:ir.ui.view:0
+msgid "Advanced"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.fi
+msgid "Finland"
+msgstr "芬蘭"
+
+#. module: base
+#: selection:ir.actions.act_window,view_type:0
+#: selection:ir.actions.act_window.view,view_mode:0
+#: view:ir.ui.view:0
+#: selection:ir.ui.view,type:0
+#: selection:wizard.ir.model.menu.create.line,view_type:0
+msgid "Tree"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,password:0
+msgid ""
+"Keep empty if you don't want the user to be able to connect on the system."
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Create / Write / Copy"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid "https://help.launchpad.net/Translations"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,view_mode:0
+msgid "View Mode"
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+msgid ""
+"When using CSV format, please also check that the first line of your file is "
+"one of the following:"
+msgstr ""
+
+#. module: base
+#: code:addons/fields.py:114
+#, python-format
+msgid "Not implemented search_memory method !"
+msgstr ""
+
+#. module: base
+#: view:res.log:0
+msgid "Logs"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish / Español"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Korean (KP) / 한국어 (KP)"
+msgstr ""
+
+#. module: base
+#: view:base.module.update:0
+msgid ""
+"This wizard will scan all module repositories on the server side to detect "
+"newly added modules as well as any change to existing modules."
+msgstr ""
+
+#. module: base
+#: field:res.company,logo:0
+msgid "Logo"
+msgstr ""
+
+#. module: base
+#: view:res.partner.address:0
+msgid "Search Contact"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Uninstall (beta)"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.act_window,target:0
+#: selection:ir.actions.url,target:0
+msgid "New Window"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bs
+msgid "Bahamas"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/partner/partner.py:250
+#, python-format
+msgid ""
+"Couldn't generate the next id because some partners have an alphabetic id !"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+msgid "Attachment"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ie
+msgid "Ireland"
+msgstr ""
+
+#. module: base
+#: field:base.module.update,update:0
+msgid "Number of modules updated"
+msgstr ""
+
+#. module: base
+#: code:addons/fields.py:100
+#, python-format
+msgid "Not implemented set_memory method !"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+msgid "Workflow Activity"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid ""
+"Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 AND "
+"GROUP_A_RULE_2) OR (GROUP_B_RULE_1 AND GROUP_B_RULE_2) )"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_ui_view
+msgid ""
+"Views allows you to personalize each view of OpenERP. You can add new "
+"fields, move fields, rename them or delete the ones that you do not need."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,groups_id:0
+#: model:ir.actions.act_window,name:base.action_res_groups
+#: view:ir.actions.report.xml:0
+#: field:ir.actions.report.xml,groups_id:0
+#: view:ir.actions.todo:0
+#: field:ir.actions.todo,groups_id:0
+#: field:ir.actions.wizard,groups_id:0
+#: view:ir.model:0
+#: field:ir.model.fields,groups:0
+#: field:ir.rule,groups:0
+#: view:ir.ui.menu:0
+#: field:ir.ui.menu,groups_id:0
+#: model:ir.ui.menu,name:base.menu_action_res_groups
+#: field:res.config.users,groups_id:0
+#: view:res.groups:0
+#: view:res.users:0
+#: field:res.users,groups_id:0
+msgid "Groups"
+msgstr "羣組"
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (CL) / Español (CL)"
+msgstr "西班牙文 (CL) / Español (CL)"
+
+#. module: base
+#: view:res.config.users:0
+msgid ""
+"Create additional users and assign them groups that will allow them to have "
+"access to selected functionalities within the system. Click on 'Done' if you "
+"do not wish to add more users at this stage, you can always do this later."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bz
+msgid "Belize"
+msgstr "伯利茲"
+
+#. module: base
+#: model:res.country,name:base.ge
+msgid "Georgia"
+msgstr "格魯吉亞"
+
+#. module: base
+#: model:res.country,name:base.pl
+msgid "Poland"
+msgstr "波蘭"
+
+#. module: base
+#: help:ir.actions.act_window,view_mode:0
+msgid ""
+"Comma-separated list of allowed view modes, such as 'form', 'tree', "
+"'calendar', etc. (Default: tree,form)"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3147
+#, python-format
+msgid "A document was modified since you last viewed it (%s:%d)"
+msgstr ""
+
+#. module: base
+#: view:workflow:0
+msgid "Workflow Editor"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,state:0
+#: selection:ir.module.module.dependency,state:0
+msgid "To be removed"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_sequence
+msgid "ir.sequence"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,expression:0
+msgid ""
+"Enter the field/expression that will return the list. E.g. select the sale "
+"order in Object, and you can have loop on the sales order line. Expression = "
+"`object.order_line`."
+msgstr ""
+
+#. module: base
+#: field:ir.property,fields_id:0
+#: selection:ir.translation,type:0
+#: field:multi_company.default,field_id:0
+msgid "Field"
+msgstr "欄位"
+
+#. module: base
+#: view:ir.rule:0
+msgid "Groups (no group = global)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.fo
+msgid "Faroe Islands"
+msgstr "法羅羣島"
+
+#. module: base
+#: selection:res.config.users,view:0
+#: selection:res.config.view,view:0
+#: selection:res.users,view:0
+msgid "Simplified"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.st
+msgid "Saint Tome (Sao Tome) and Principe"
+msgstr ""
+
+#. module: base
+#: selection:res.partner.address,type:0
+msgid "Invoice"
+msgstr "發票"
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Portugese (BR) / Português (BR)"
+msgstr "葡萄牙文 (BR) / Português (BR)"
+
+#. module: base
+#: model:res.country,name:base.bb
+msgid "Barbados"
+msgstr "巴巴多斯"
+
+#. module: base
+#: model:res.country,name:base.mg
+msgid "Madagascar"
+msgstr "馬達加斯加"
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:96
+#, python-format
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.configuration.wizard,note:0
+msgid "Next Wizard"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_menu_admin
+#: view:ir.ui.menu:0
+#: field:ir.ui.menu,name:0
+msgid "Menu"
+msgstr "選單"
+
+#. module: base
+#: field:res.currency,rate:0
+msgid "Current Rate"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view.custom,ref_id:0
+msgid "Original View"
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "Action To Launch"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.url,target:0
+msgid "Action Target"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ai
+msgid "Anguilla"
+msgstr "安圭拉"
+
+#. module: base
+#: field:ir.ui.view_sc,name:0
+msgid "Shortcut Name"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,limit:0
+msgid "Default limit for the list view"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,write_id:0
+msgid ""
+"Provide the field name that the record id refers to for the write operation. "
+"If it is empty it will refer to the active id of the object."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.zw
+msgid "Zimbabwe"
+msgstr "津巴布韋"
+
+#. module: base
+#: view:base.module.update:0
+msgid "Please be patient, as this operation may take a few seconds..."
+msgstr ""
+
+#. module: base
+#: help:ir.values,action_id:0
+msgid "This field is not used, it only helps you to select the right action."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,email:0
+msgid "Email Address"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "French (BE) / Français (BE)"
+msgstr "法文 (BE) / Français (BE)"
+
+#. module: base
+#: view:ir.actions.server:0
+#: field:workflow.activity,action_id:0
+msgid "Server Action"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tt
+msgid "Trinidad and Tobago"
+msgstr "千里達"
+
+#. module: base
+#: model:res.country,name:base.lv
+msgid "Latvia"
+msgstr "拉脫維亞"
+
+#. module: base
+#: view:ir.values:0
+msgid "Values"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Field Mappings"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid "Export Translations"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_custom
+msgid "Customization"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.py
+msgid "Paraguay"
+msgstr "巴拉圭"
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_act_window_close
+msgid "ir.actions.act_window_close"
+msgstr ""
+
+#. module: base
+#: field:ir.server.object.lines,col1:0
+msgid "Destination"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.lt
+msgid "Lithuania"
+msgstr "立陶宛"
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_view_partner_clear_ids
+#: model:ir.model,name:base.model_partner_clear_ids
+#: view:partner.clear.ids:0
+msgid "Clear IDs"
+msgstr ""
+
+#. module: base
+#: help:ir.cron,model:0
+msgid ""
+"Name of object whose function will be called when this scheduler will run. "
+"e.g. 'res.partener'"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1040
+#, python-format
+msgid "The perm_read method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%y - Year without century [00,99]."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.si
+msgid "Slovenia"
+msgstr "斯洛文尼亞"
+
+#. module: base
+#: model:res.country,name:base.pk
+msgid "Pakistan"
+msgstr "巴基斯坦"
+
+#. module: base
+#: code:addons/orm.py:1350
+#, python-format
+msgid "Invalid Object Architecture!"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_email_gateway_form
+msgid "Messages"
+msgstr "訊息"
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:303
+#: code:addons/base/ir/ir_model.py:317
+#: code:addons/base/ir/ir_model.py:319
+#: code:addons/base/ir/ir_model.py:321
+#: code:addons/base/ir/ir_model.py:328
+#: code:addons/base/ir/ir_model.py:331
+#: code:addons/base/module/wizard/base_update_translations.py:38
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%p - Equivalent of either AM or PM."
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Iteration Actions"
+msgstr ""
+
+#. module: base
+#: help:multi_company.default,company_id:0
+msgid "Company where the user is connected"
+msgstr ""
+
+#. module: base
+#: field:publisher_warranty.contract,date_stop:0
+msgid "Ending Date"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nz
+msgid "New Zealand"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3366
+#, python-format
+msgid ""
+"One of the records you are trying to modify has already been deleted "
+"(Document type: %s)."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_country
+msgid ""
+"Display and manage the list of all countries that can be assigned to your "
+"partner records. You can create or delete countries to make sure the ones "
+"you are working on will be maintained."
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_7
+msgid "Openstuff.net"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nf
+msgid "Norfolk Island"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Korean (KR) / 한국어 (KR)"
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,model:0
+msgid "The technical name of the model this field belongs to"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,action_id:0
+#: selection:ir.actions.server,state:0
+msgid "Client Action"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bd
+msgid "Bangladesh"
+msgstr ""
+
+#. module: base
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr ""
+
+#. module: base
+#: selection:publisher_warranty.contract,state:0
+msgid "Valid"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "XSL"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:322
+#, python-format
+msgid "Can not upgrade module '%s'. It is not installed."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cu
+msgid "Cuba"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner_event
+msgid "res.partner.event"
+msgstr ""
+
+#. module: base
+#: model:res.widget,title:base.facebook_widget
+msgid "Facebook"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.am
+msgid "Armenia"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_property_form
+#: model:ir.ui.menu,name:base.menu_ir_property_form_all
+msgid "Configuration Parameters"
+msgstr ""
+
+#. module: base
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.se
+msgid "Sweden"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.act_window.view,view_mode:0
+#: selection:ir.ui.view,type:0
+#: selection:wizard.ir.model.menu.create.line,view_type:0
+msgid "Gantt"
+msgstr ""
+
+#. module: base
+#: view:ir.property:0
+msgid "Property"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner_bank_type
+#: view:res.partner.bank.type:0
+msgid "Bank Account Type"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,config_logo:0
+#: field:base.language.import,config_logo:0
+#: field:base.language.install,config_logo:0
+#: field:base.module.import,config_logo:0
+#: field:base.module.update,config_logo:0
+#: field:base.update.translations,config_logo:0
+#: field:ir.actions.configuration.wizard,config_logo:0
+#: field:ir.wizard.screen,config_logo:0
+#: field:publisher_warranty.contract.wizard,config_logo:0
+#: field:res.config,config_logo:0
+#: field:res.config.installer,config_logo:0
+#: field:res.config.users,config_logo:0
+#: field:res.config.view,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Iteration Action Configuration"
+msgstr ""
+
+#. module: base
+#: selection:publisher_warranty.contract,state:0
+msgid "Canceled"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.at
+msgid "Austria"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,state:0
+#: selection:base.module.import,state:0
+#: selection:base.module.update,state:0
+msgid "done"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.act_window.view,view_mode:0
+#: model:ir.ui.menu,name:base.menu_calendar_configuration
+#: selection:ir.ui.view,type:0
+#: selection:wizard.ir.model.menu.create.line,view_type:0
+msgid "Calendar"
+msgstr ""
+
+#. module: base
+#: field:res.partner.address,partner_id:0
+msgid "Partner Name"
+msgstr ""
+
+#. module: base
+#: field:workflow.activity,signal_send:0
+msgid "Signal (subflow.*)"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_17
+msgid "HR sector"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3817
+#, python-format
+msgid ""
+"Invalid \"order\" specified. A valid \"order\" specification is a comma-"
+"separated list of valid field names (optionally followed by asc/desc for the "
+"direction)"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_module_module_dependency
+msgid "Module dependency"
+msgstr ""
+
+#. module: base
+#: selection:publisher_warranty.contract.wizard,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: base
+#: selection:res.config.users,view:0
+#: selection:res.config.view,view:0
+#: selection:res.users,view:0
+msgid "Extended"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_partner_title_contact
+msgid ""
+"Manage the contact titles you want to have available in your system and the "
+"way you want to print them in letters and other documents. Some example: "
+"Mr., Mrs. "
+msgstr ""
+
+#. module: base
+#: field:res.company,rml_footer1:0
+msgid "Report Footer 1"
+msgstr ""
+
+#. module: base
+#: field:res.company,rml_footer2:0
+msgid "Report Footer 2"
+msgstr ""
+
+#. module: base
+#: view:ir.model.access:0
+#: view:res.groups:0
+#: field:res.groups,model_access:0
+msgid "Access Controls"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+#: field:ir.module.module,dependencies_id:0
+msgid "Dependencies"
+msgstr ""
+
+#. module: base
+#: field:multi_company.default,company_id:0
+msgid "Main Company"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,web_icon_hover:0
+msgid "Web Icon File (hover)"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid ""
+"If you use a formula type, use a python expression using the variable "
+"'object'."
+msgstr ""
+
+#. module: base
+#: field:res.partner.address,birthdate:0
+msgid "Birthdate"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_title_contact
+#: model:ir.ui.menu,name:base.menu_partner_title_contact
+msgid "Contact Titles"
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+msgid ""
+"Please double-check that the file encoding is set to UTF-8 (sometimes called "
+"Unicode) when the translator exports it."
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (DO) / Español (DO)"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_workflow_activity
+msgid "workflow.activity"
+msgstr ""
+
+#. module: base
+#: help:ir.ui.view_sc,res_id:0
+msgid ""
+"Reference of the target resource, whose model/table depends on the 'Resource "
+"Name' field."
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,select_level:0
+msgid "Searchable"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.uy
+msgid "Uruguay"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Finnish / Suomi"
+msgstr ""
+
+#. module: base
+#: field:ir.rule,perm_write:0
+msgid "Apply For Write"
+msgstr ""
+
+#. module: base
+#: field:ir.sequence,prefix:0
+msgid "Prefix"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "German / Deutsch"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,trigger_name:0
+msgid "Select the Signal name that is to be used as the trigger."
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Fields Mapping"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Portugese / Português"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,name:base.res_partner_title_sir
+msgid "Sir"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1622
+#, python-format
+msgid "There is no view of type '%s' defined for the structure!"
+msgstr ""
+
+#. module: base
+#: field:ir.default,ref_id:0
+msgid "ID Ref."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.server,name:base.action_start_configurator
+#: model:ir.ui.menu,name:base.menu_view_base_module_configuration
+msgid "Start Configuration"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mt
+msgid "Malta"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,fields_lines:0
+msgid "Field Mappings."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_module_module
+#: view:ir.model.data:0
+#: field:ir.model.data,module:0
+#: view:ir.module.module:0
+#: field:ir.module.module.dependency,module_id:0
+#: report:ir.module.reference.graph:0
+#: field:ir.translation,module:0
+msgid "Module"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,description:0
+#: view:ir.module.module:0
+#: field:ir.module.module,description:0
+#: field:res.partner.bank,name:0
+#: view:res.partner.event:0
+#: field:res.partner.event,description:0
+#: view:res.request:0
+msgid "Description"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_workflow_instance_form
+#: model:ir.ui.menu,name:base.menu_workflow_instance
+msgid "Instances"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.aq
+msgid "Antarctica"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,auto:0
+msgid "Custom python parser"
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+msgid "_Import"
+msgstr ""
+
+#. module: base
+#: view:res.partner.canal:0
+msgid "Channel"
+msgstr ""
+
+#. module: base
+#: field:res.lang,grouping:0
+msgid "Separator Format"
+msgstr ""
+
+#. module: base
+#: selection:publisher_warranty.contract,state:0
+msgid "Unvalidated"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.next_id_9
+msgid "Database Structure"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_mass_mail
+#: model:ir.model,name:base.model_partner_wizard_spam
+#: view:partner.wizard.spam:0
+msgid "Mass Mailing"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.yt
+msgid "Mayotte"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_actions.py:597
+#, python-format
+msgid "Please specify an action to launch !"
+msgstr ""
+
+#. module: base
+#: view:res.payterm:0
+msgid "Payment Term"
+msgstr ""
+
+#. module: base
+#: selection:res.lang,direction:0
+msgid "Right-to-Left"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+#: model:ir.actions.act_window,name:base.actions_ir_filters_view
+#: view:ir.filters:0
+#: model:ir.model,name:base.model_ir_filters
+#: model:ir.ui.menu,name:base.menu_ir_filters
+msgid "Filters"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:758
+#, python-format
+msgid "Please check that all your lines have %d columns."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_cron_act
+#: view:ir.cron:0
+#: model:ir.ui.menu,name:base.menu_ir_cron_act
+msgid "Scheduled Actions"
+msgstr ""
+
+#. module: base
+#: field:res.partner.address,title:0
+#: field:res.partner.title,name:0
+#: field:res.widget,title:0
+msgid "Title"
+msgstr ""
+
+#. module: base
+#: help:ir.property,res_id:0
+msgid "If not set, acts as a default value for new resources"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3448
+#, python-format
+msgid "Recursivity Detected."
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:262
+#, python-format
+msgid "Recursion error in modules dependencies !"
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+msgid ""
+"This wizard helps you add a new language to your OpenERP system. After "
+"loading a new language it becomes available as default interface language "
+"for users and partners."
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+msgid "Create a Menu"
+msgstr ""
+
+#. module: base
+#: help:res.partner,vat:0
+msgid ""
+"Value Added Tax number. Check the box if the partner is subjected to the "
+"VAT. Used by the VAT legal statement."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_maintenance_contract
+msgid "maintenance.contract"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ru
+msgid "Russian Federation"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Urdu / اردو"
+msgstr ""
+
+#. module: base
+#: field:res.company,name:0
+msgid "Company Name"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_country
+#: model:ir.ui.menu,name:base.menu_country_partner
+msgid "Countries"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "RML (deprecated - use Report)"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid "Record rules"
+msgstr ""
+
+#. module: base
+#: view:ir.property:0
+msgid "Field Information"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.todo:0
+msgid "Search Actions"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_view_partner_wizard_ean_check
+#: view:partner.wizard.ean.check:0
+msgid "Ean check"
+msgstr ""
+
+#. module: base
+#: field:res.partner,vat:0
+msgid "VAT"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "12. %w ==> 5 ( Friday is the 6th day)"
+msgstr ""
+
+#. module: base
+#: constraint:res.partner.category:0
+msgid "Error ! You can not create recursive categories."
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%x - Appropriate date representation."
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%d - Day of the month [01,31]."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tj
+msgid "Tajikistan"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "GPL-2 or later version"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,shortcut:base.res_partner_title_sir
+msgid "M."
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:429
+#, python-format
+msgid ""
+"Can not create the module file:\n"
+" %s"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:2973
+#, python-format
+msgid ""
+"Operation prohibited by access rules, or performed on an already deleted "
+"document (Operation: read, Document type: %s)."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nr
+msgid "Nauru"
+msgstr "瑙魯"
+
+#. module: base
+#: code:addons/base/module/module.py:200
+#, python-format
+msgid "The certificate ID of the module must be unique !"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_property
+msgid "ir.property"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.act_window,view_type:0
+#: selection:ir.actions.act_window.view,view_mode:0
+#: view:ir.ui.view:0
+#: selection:ir.ui.view,type:0
+#: selection:wizard.ir.model.menu.create.line,view_type:0
+msgid "Form"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.me
+msgid "Montenegro"
+msgstr "黑山"
+
+#. module: base
+#: view:ir.cron:0
+msgid "Technical Data"
+msgstr "技術資料"
+
+#. module: base
+#: view:res.partner:0
+#: field:res.partner,category_id:0
+msgid "Categories"
+msgstr "分類"
+
+#. module: base
+#: view:base.language.import:0
+msgid ""
+"If you need another language than the official ones available, you can "
+"import a language pack from here. Other OpenERP languages than the official "
+"ones can be found on launchpad."
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+#: selection:ir.module.module,state:0
+#: selection:ir.module.module.dependency,state:0
+msgid "To be upgraded"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ly
+msgid "Libya"
+msgstr "利比亞"
+
+#. module: base
+#: model:res.country,name:base.cf
+msgid "Central African Republic"
+msgstr "中非共和國"
+
+#. module: base
+#: model:res.country,name:base.li
+msgid "Liechtenstein"
+msgstr "列支敦士登"
+
+#. module: base
+#: model:ir.model,name:base.model_partner_sms_send
+#: view:partner.sms.send:0
+msgid "Send SMS"
+msgstr ""
+
+#. module: base
+#: field:res.partner,ean13:0
+msgid "EAN13"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1622
+#, python-format
+msgid "Invalid Architecture!"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pt
+msgid "Portugal"
+msgstr "葡萄牙"
+
+#. module: base
+#: sql_constraint:ir.model.data:0
+msgid ""
+"You cannot have multiple records with the same id for the same module !"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,certificate:0
+msgid "Quality Certificate"
+msgstr "品質證書"
+
+#. module: base
+#: view:res.lang:0
+msgid "6. %d, %m ==> 05, 12"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,date:0
+#: field:res.users,date:0
+msgid "Last Connection"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,help:0
+msgid "Action description"
+msgstr ""
+
+#. module: base
+#: help:res.partner,customer:0
+msgid "Check this box if the partner is a customer."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_lang_act_window
+#: model:ir.model,name:base.model_res_lang
+#: model:ir.ui.menu,name:base.menu_res_lang_act_window
+#: view:res.lang:0
+msgid "Languages"
+msgstr "語言"
+
+#. module: base
+#: selection:workflow.activity,join_mode:0
+#: selection:workflow.activity,split_mode:0
+msgid "Xor"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ec
+msgid "Ecuador"
+msgstr "厄瓜多爾"
+
+#. module: base
+#: code:addons/base/module/wizard/base_export_language.py:52
+#, python-format
+msgid ""
+"Save this document to a .CSV file and open it with your favourite "
+"spreadsheet software. The file encoding is UTF-8. You have to translate the "
+"latest column before reimporting it."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_customer_form
+#: model:ir.actions.act_window,name:base.action_partner_form
+#: model:ir.ui.menu,name:base.menu_partner_form
+#: view:res.partner:0
+msgid "Customers"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.au
+msgid "Australia"
+msgstr "澳洲"
+
+#. module: base
+#: help:res.partner,lang:0
+msgid ""
+"If the selected language is loaded in the system, all documents related to "
+"this partner will be printed in this language. If not, it will be english."
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Menu :"
+msgstr ""
+
+#. module: base
+#: selection:ir.model.fields,state:0
+msgid "Base Field"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract:0
+msgid "Validate"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.todo,restart:0
+msgid "Restart"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_sxw_content:0
+#: field:ir.actions.report.xml,report_sxw_content_data:0
+msgid "SXW content"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.wizard:0
+#: field:wizard.ir.model.menu.create.line,wizard_id:0
+msgid "Wizard"
+msgstr ""
+
+#. module: base
+#: view:ir.cron:0
+msgid "Action to Trigger"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:136
+#, python-format
+msgid "\"email_from\" needs to be set to send welcome mails to users"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Constraint"
+msgstr "約束"
+
+#. module: base
+#: selection:ir.values,key:0
+#: selection:res.partner.address,type:0
+msgid "Default"
+msgstr "預設"
+
+#. module: base
+#: view:ir.model.fields:0
+#: field:ir.model.fields,required:0
+#: field:res.partner.bank.type.field,required:0
+msgid "Required"
+msgstr "必要"
+
+#. module: base
+#: view:res.users:0
+msgid "Default Filters"
+msgstr ""
+
+#. module: base
+#: field:res.request.history,name:0
+msgid "Summary"
+msgstr "摘要"
+
+#. module: base
+#: field:multi_company.default,expression:0
+msgid "Expression"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,subject:0
+msgid ""
+"Specify the subject. You can use fields from the object, e.g. `Hello [[ "
+"object.partner_id.name ]]`"
+msgstr ""
+
+#. module: base
+#: view:res.company:0
+msgid "Header/Footer"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,help:0
+msgid ""
+"Optional help text for the users with a description of the target view, such "
+"as its usage and purpose."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.va
+msgid "Holy See (Vatican City State)"
+msgstr "梵蒂岡"
+
+#. module: base
+#: field:base.module.import,module_file:0
+msgid "Module .ZIP file"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view,xml_id:0
+msgid "XML ID"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_16
+msgid "Telecom sector"
+msgstr "電訊範疇"
+
+#. module: base
+#: field:workflow.transition,trigger_model:0
+msgid "Trigger Object"
+msgstr ""
+
+#. module: base
+#: view:res.users:0
+msgid "Current Activity"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+#: field:workflow.activity,in_transitions:0
+msgid "Incoming Transitions"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sr
+msgid "Suriname"
+msgstr "蘇里南"
+
+#. module: base
+#: model:ir.ui.menu,name:base.marketing_menu
+msgid "Marketing"
+msgstr "營銷"
+
+#. module: base
+#: view:res.partner.bank:0
+#: model:res.partner.bank.type,name:base.bank_normal
+msgid "Bank account"
+msgstr "銀行帳戶"
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (HN) / Español (HN)"
+msgstr "西班牙文 (HN) / Español (HN)"
+
+#. module: base
+#: view:ir.sequence.type:0
+msgid "Sequence Type"
+msgstr ""
+
+#. module: base
+#: view:ir.ui.view.custom:0
+msgid "Customized Architecture"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,license:0
+msgid "License"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,url:0
+msgid "Url"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.todo,restart:0
+msgid "Always"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "SQL Constraint"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,srcmodel_id:0
+#: field:ir.model.fields,model_id:0
+msgid "Model"
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+msgid ""
+"The selected language has been successfully installed. You must change the "
+"preferences of the user and open a new menu to view the changes."
+msgstr ""
+
+#. module: base
+#: sql_constraint:ir.config_parameter:0
+msgid "Key must be unique."
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+msgid "Open a Window"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gq
+msgid "Equatorial Guinea"
+msgstr "赤道畿內亞"
+
+#. module: base
+#: view:base.module.import:0
+#: model:ir.actions.act_window,name:base.action_view_base_module_import
+msgid "Module Import"
+msgstr ""
+
+#. module: base
+#: field:res.bank,zip:0
+#: field:res.partner.address,zip:0
+#: field:res.partner.bank,zip:0
+msgid "Zip"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+#: field:ir.module.module,author:0
+msgid "Author"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mk
+msgid "FYROM"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%c - Appropriate date and time representation."
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_config.py:422
+#, python-format
+msgid ""
+"Your database is now fully configured.\n"
+"\n"
+"Click 'Continue' and enjoy your OpenERP experience..."
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Hebrew / עִבְרִי"
+msgstr "希伯來文 / עִבְרִי"
+
+#. module: base
+#: model:res.country,name:base.bo
+msgid "Bolivia"
+msgstr "玻利維亞"
+
+#. module: base
+#: model:res.country,name:base.gh
+msgid "Ghana"
+msgstr "加納"
+
+#. module: base
+#: field:res.lang,direction:0
+msgid "Direction"
+msgstr "方向"
+
+#. module: base
+#: view:ir.actions.act_window:0
+#: model:ir.actions.act_window,name:base.action_ui_view
+#: field:ir.actions.act_window,view_ids:0
+#: field:ir.actions.act_window,views:0
+#: field:ir.module.module,views_by_module:0
+#: model:ir.ui.menu,name:base.menu_action_ui_view
+#: view:ir.ui.view:0
+msgid "Views"
+msgstr "檢視"
+
+#. module: base
+#: view:res.groups:0
+#: field:res.groups,rule_groups:0
+msgid "Rules"
+msgstr "規則"
+
+#. module: base
+#: code:addons/base/module/module.py:216
+#, python-format
+msgid "You try to remove a module that is installed or will be installed"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "The selected modules have been updated / installed !"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (PR) / Español (PR)"
+msgstr "西班牙文 (PR) / Español (PR)"
+
+#. module: base
+#: model:res.country,name:base.gt
+msgid "Guatemala"
+msgstr "危地馬拉"
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_workflow_form
+#: model:ir.ui.menu,name:base.menu_low_workflow
+#: model:ir.ui.menu,name:base.menu_workflow
+#: model:ir.ui.menu,name:base.menu_workflow_root
+msgid "Workflows"
+msgstr ""
+
+#. module: base
+#: field:ir.translation,xml_id:0
+msgid "XML Id"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_config_user_form
+msgid "Create Users"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner_title
+msgid "res.partner.title"
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "tree_but_action, client_print_multi"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_retailers0
+msgid "Retailers"
+msgstr "零售商"
+
+#. module: base
+#: help:ir.cron,priority:0
+msgid ""
+"0=Very Urgent\n"
+"10=Not urgent"
+msgstr ""
+
+#. module: base
+#: view:res.config:0
+#: view:res.config.installer:0
+msgid "Skip"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ls
+msgid "Lesotho"
+msgstr "萊索托"
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:114
+#, python-format
+msgid "You can not remove the model '%s' !"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ke
+msgid "Kenya"
+msgstr "肯雅"
+
+#. module: base
+#: view:res.partner.event:0
+msgid "Event"
+msgstr "活動"
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_custom_reports
+msgid "Custom Reports"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Abkhazian / аҧсуа"
+msgstr "阿布哈茲文 / аҧсуа"
+
+#. module: base
+#: view:base.module.configuration:0
+msgid "System Configuration Done"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:929
+#, python-format
+msgid "Error occurred while validating the field(s) %s: %s"
+msgstr ""
+
+#. module: base
+#: view:ir.property:0
+msgid "Generic"
+msgstr "通用"
+
+#. module: base
+#: model:res.country,name:base.sm
+msgid "San Marino"
+msgstr "聖馬力諾"
+
+#. module: base
+#: model:res.country,name:base.bm
+msgid "Bermuda"
+msgstr "百慕達"
+
+#. module: base
+#: model:res.country,name:base.pe
+msgid "Peru"
+msgstr "秘魯"
+
+#. module: base
+#: selection:ir.model.fields,on_delete:0
+msgid "Set NULL"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bj
+msgid "Benin"
+msgstr "貝寧"
+
+#. module: base
+#: code:addons/base/publisher_warranty/publisher_warranty.py:281
+#, python-format
+msgid "That contract is already registered in the system."
+msgstr ""
+
+#. module: base
+#: help:ir.sequence,suffix:0
+msgid "Suffix value of the record for the sequence"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (PY) / Español (PY)"
+msgstr "西班牙文 (PY) / Español (PY)"
+
+#. module: base
+#: field:ir.config_parameter,key:0
+msgid "Key"
+msgstr ""
+
+#. module: base
+#: field:res.company,rml_header:0
+msgid "RML Header"
+msgstr ""
+
+#. module: base
+#: field:partner.sms.send,app_id:0
+msgid "API ID"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:486
+#, python-format
+msgid ""
+"You can not create this document (%s) ! Be sure your user belongs to one of "
+"these groups: %s."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mu
+msgid "Mauritius"
+msgstr "毛里求斯"
+
+#. module: base
+#: view:ir.model.access:0
+#: view:ir.rule:0
+msgid "Full Access"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+#: view:ir.actions.report.xml:0
+#: view:ir.actions.wizard:0
+#: view:ir.model.fields:0
+#: model:ir.ui.menu,name:base.menu_security
+msgid "Security"
+msgstr "保安"
+
+#. module: base
+#: model:res.widget,title:base.openerp_favorites_twitter_widget
+msgid "OpenERP Favorites"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.za
+msgid "South Africa"
+msgstr "南非"
+
+#. module: base
+#: view:ir.module.module:0
+#: selection:ir.module.module,state:0
+#: selection:ir.module.module.dependency,state:0
+msgid "Installed"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Ukrainian / українська"
+msgstr "烏克蘭文 / українська"
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_translation
+#: model:ir.ui.menu,name:base.menu_action_translation
+msgid "Translation Terms"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sn
+msgid "Senegal"
+msgstr "塞內加爾"
+
+#. module: base
+#: model:res.country,name:base.hu
+msgid "Hungary"
+msgstr "匈牙利"
+
+#. module: base
+#: model:ir.model,name:base.model_res_groups
+msgid "res.groups"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.br
+msgid "Brazil"
+msgstr "巴西"
+
+#. module: base
+#: view:res.lang:0
+msgid "%M - Minute [00,59]."
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "Affero GPL-3"
+msgstr ""
+
+#. module: base
+#: field:ir.sequence,number_next:0
+msgid "Next Number"
+msgstr ""
+
+#. module: base
+#: help:workflow.transition,condition:0
+msgid "Expression to be satisfied if we want the transition done."
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (PA) / Español (PA)"
+msgstr "西班牙文 (PA) / Español (PA)"
+
+#. module: base
+#: view:res.currency:0
+#: field:res.currency,rate_ids:0
+msgid "Rates"
+msgstr "匯率"
+
+#. module: base
+#: model:res.country,name:base.sy
+msgid "Syria"
+msgstr "敍利亞"
+
+#. module: base
+#: view:res.lang:0
+msgid "======================================================"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,mobile:0
+msgid ""
+"Provides fields that be used to fetch the mobile number, e.g. you select the "
+"invoice, then `object.invoice_address_id.mobile` is the field which gives "
+"the correct mobile number"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "System update completed"
+msgstr ""
+
+#. module: base
+#: selection:res.request,state:0
+msgid "draft"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+#: field:res.currency,date:0
+#: field:res.currency.rate,name:0
+#: field:res.partner,date:0
+#: field:res.partner.event,date:0
+#: field:res.request,date_sent:0
+msgid "Date"
+msgstr "日期"
+
+#. module: base
+#: field:ir.actions.report.xml,report_sxw:0
+msgid "SXW path"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+msgid "Data"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,parent_id:0
+#: field:wizard.ir.model.menu.create,menu_id:0
+msgid "Parent Menu"
+msgstr ""
+
+#. module: base
+#: field:ir.rule,perm_unlink:0
+msgid "Apply For Delete"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:319
+#, python-format
+msgid "Cannot rename column to %s, because that column already exists!"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+msgid "Attached To"
+msgstr ""
+
+#. module: base
+#: field:res.lang,decimal_point:0
+msgid "Decimal Separator"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_res_groups
+msgid ""
+"A group is a set of functional areas that will be assigned to the user in "
+"order to give them access and rights to specific applications and tasks in "
+"the system. You can create custom groups or edit the ones existing by "
+"default in order to customize the view of the menu that users will be able "
+"to see. Whether they can have a read, write, create and delete access right "
+"can be managed from here."
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+#: view:res.request:0
+#: field:res.request,history:0
+msgid "History"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,create_uid:0
+msgid "Creator"
+msgstr ""
+
+#. module: base
+#: model:res.company,overdue_msg:base.main_company
+msgid ""
+"Please note that the following payments are now due. If your payment "
+" has been sent, kindly forward your payment details. If "
+"payment will be delayed further, please contact us "
+"to discuss. \n"
+"Would your payment have been carried out after this mail was sent, please "
+"consider the present one as void."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mx
+msgid "Mexico"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_base_config_plugins
+msgid "Plugins"
+msgstr ""
+
+#. module: base
+#: field:res.company,child_ids:0
+msgid "Child Companies"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ni
+msgid "Nicaragua"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1046
+#, python-format
+msgid "The write method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: view:res.partner.event:0
+msgid "General Description"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_config_simple_view_form
+#: view:res.config.view:0
+msgid "Configure Your Interface"
+msgstr ""
+
+#. module: base
+#: field:ir.values,meta:0
+msgid "Meta Datas"
+msgstr ""
+
+#. module: base
+#: sql_constraint:ir.ui.view_sc:0
+msgid "Shortcut for this menu already exists!"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ve
+msgid "Venezuela"
+msgstr "委內瑞拉"
+
+#. module: base
+#: view:res.lang:0
+msgid "9. %j ==> 340"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.zm
+msgid "Zambia"
+msgstr "贊比亞"
+
+#. module: base
+#: help:res.partner,user_id:0
+msgid ""
+"The internal user that is in charge of communicating with this partner if "
+"any."
+msgstr ""
+
+#. module: base
+#: field:res.partner,parent_id:0
+msgid "Parent Partner"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Cancel Upgrade"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ci
+msgid "Ivory Coast (Cote D'Ivoire)"
+msgstr "科特迪瓦(象牙海岸)"
+
+#. module: base
+#: model:res.country,name:base.kz
+msgid "Kazakhstan"
+msgstr "哈薩克"
+
+#. module: base
+#: view:res.lang:0
+msgid "%w - Weekday number [0(Sunday),6]."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_partner_form
+msgid ""
+"A customer is an entity you do business with, like a company or an "
+"organization. A customer can have several contacts or addresses which are "
+"the people working for this company. You can use the history tab, to follow "
+"all transactions related to a customer: sales order, emails, opportunities, "
+"claims, etc. If you use the email gateway, the Outlook or the Thunderbird "
+"plugin, don't forget to register emails to each contact so that the gateway "
+"will automatically attach incoming emails to the right partner."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,name:0
+#: field:ir.actions.todo,name:0
+#: field:ir.cron,name:0
+#: field:ir.model.access,name:0
+#: field:ir.model.fields,name:0
+#: field:ir.module.category,name:0
+#: field:ir.module.module,name:0
+#: field:ir.module.module.dependency,name:0
+#: report:ir.module.reference.graph:0
+#: field:ir.property,name:0
+#: field:ir.rule,name:0
+#: field:ir.sequence,name:0
+#: field:ir.sequence.type,name:0
+#: field:ir.values,name:0
+#: field:multi_company.default,name:0
+#: field:res.bank,name:0
+#: field:res.config.view,name:0
+#: field:res.lang,name:0
+#: field:res.partner,name:0
+#: field:res.partner.bank.type,name:0
+#: view:res.partner.event:0
+#: field:res.request.link,name:0
+#: field:workflow,name:0
+#: field:workflow.activity,name:0
+msgid "Name"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,multi:0
+msgid ""
+"If set to true, the action will not be displayed on the right toolbar of a "
+"form view"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ms
+msgid "Montserrat"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:205
+#, python-format
+msgid ""
+"The Selection Options expression is not a valid Pythonic expression.Please "
+"provide an expression in the [('key','Label'), ...] format."
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_translation_app
+msgid "Application Terms"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,context_tz:0
+#: help:res.users,context_tz:0
+msgid ""
+"The user's timezone, used to perform timezone conversions between the server "
+"and the client."
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,demo:0
+msgid "Demo data"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "English (UK)"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Japanese / 日本語"
+msgstr ""
+
+#. module: base
+#: help:workflow.transition,act_from:0
+msgid ""
+"Source activity. When this activity is over, the condition is tested to "
+"determine if we can start the ACT_TO activity."
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_3
+msgid "Starter Partner"
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,relation_field:0
+msgid ""
+"For one2many fields, the field on the target model that implement the "
+"opposite many2one relationship"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_act_window_view
+msgid "ir.actions.act_window.view"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Web"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "English (CA)"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_publisher_warranty_contract
+msgid "publisher_warranty.contract"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.et
+msgid "Ethiopia"
+msgstr ""
+
+#. module: base
+#: help:res.country.state,code:0
+msgid "The state code in three chars.\n"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sj
+msgid "Svalbard and Jan Mayen Islands"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_wizard
+#: selection:ir.ui.menu,action:0
+msgid "ir.actions.wizard"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+#: view:ir.actions.report.xml:0
+#: view:ir.actions.server:0
+#: view:ir.filters:0
+#: view:res.request:0
+msgid "Group By"
+msgstr ""
+
+#. module: base
+#: view:res.config:0
+#: view:res.config.installer:0
+msgid "title"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_language_install
+msgid "Install Language"
+msgstr ""
+
+#. module: base
+#: view:ir.translation:0
+msgid "Translation"
+msgstr ""
+
+#. module: base
+#: selection:res.request,state:0
+msgid "closed"
+msgstr ""
+
+#. module: base
+#: selection:base.language.export,state:0
+msgid "get"
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,on_delete:0
+msgid "On delete property for many2one fields"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,write_id:0
+msgid "Write Id"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_product
+msgid "Products"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,domain:0
+#: field:ir.filters,domain:0
+msgid "Domain Value"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "SMS Configuration"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (BO) / Español (BO)"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_access_act
+#: model:ir.ui.menu,name:base.menu_ir_access_act
+msgid "Access Controls List"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.um
+msgid "USA Minor Outlying Islands"
+msgstr ""
+
+#. module: base
+#: field:res.partner.bank,state:0
+#: field:res.partner.bank.type.field,bank_type_id:0
+msgid "Bank Type"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:58
+#: code:addons/base/res/res_user.py:67
+#, python-format
+msgid "The name of the group can not start with \"-\""
+msgstr ""
+
+#. module: base
+#: view:ir.ui.view_sc:0
+#: field:res.partner.title,shortcut:0
+msgid "Shortcut"
+msgstr ""
+
+#. module: base
+#: field:ir.model.data,date_init:0
+msgid "Init Date"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Gujarati / ગુજરાતી"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:257
+#, python-format
+msgid ""
+"Unable to process module \"%s\" because an external dependency is not met: %s"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract.wizard:0
+msgid "Please enter the serial key provided in your contract document:"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+#: field:workflow.activity,flow_start:0
+msgid "Flow Start"
+msgstr ""
+
+#. module: base
+#: code:addons/__init__.py:834
+#, python-format
+msgid "module base cannot be loaded! (hint: verify addons-path)"
+msgstr ""
+
+#. module: base
+#: view:res.partner.bank:0
+msgid "Bank Account Owner"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.act_values_form
+msgid "Client Actions Connections"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,res_name:0
+#: field:ir.ui.view_sc,resource:0
+msgid "Resource Name"
+msgstr ""
+
+#. module: base
+#: selection:ir.cron,interval_type:0
+msgid "Hours"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gp
+msgid "Guadeloupe (French)"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_lang.py:157
+#: code:addons/base/res/res_lang.py:159
+#: code:addons/base/res/res_lang.py:161
+#, python-format
+msgid "User Error"
+msgstr ""
+
+#. module: base
+#: help:workflow.transition,signal:0
+msgid ""
+"When the operation of transition comes from a button pressed in the client "
+"form, signal tests the name of the pressed button. If signal is NULL, no "
+"button is necessary to validate this transition."
+msgstr ""
+
+#. module: base
+#: help:multi_company.default,object_id:0
+msgid "Object affected by this rule"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Directory"
+msgstr ""
+
+#. module: base
+#: field:wizard.ir.model.menu.create,name:0
+msgid "Menu Name"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Author Website"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+msgid "Month"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.my
+msgid "Malaysia"
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+#: model:ir.actions.act_window,name:base.action_view_base_language_install
+msgid "Load Official Translation"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_request_history
+msgid "res.request.history"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Client Action Configuration"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner_address
+#: view:res.partner.address:0
+msgid "Partner Addresses"
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,translate:0
+msgid ""
+"Whether values for this field can be translated (enables the translation "
+"mechanism for that field)"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%S - Seconds [00,61]."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cv
+msgid "Cape Verde"
+msgstr ""
+
+#. module: base
+#: view:base.module.import:0
+msgid "Select module package to import (.zip file):"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.act_res_partner_event
+#: field:res.partner,events:0
+#: field:res.partner.event,name:0
+#: model:res.widget,title:base.events_widget
+msgid "Events"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_url
+#: selection:ir.ui.menu,action:0
+msgid "ir.actions.url"
+msgstr ""
+
+#. module: base
+#: model:res.widget,title:base.currency_converter_widget
+msgid "Currency Converter"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:156
+#, python-format
+msgid "Wrong ID for the browse record, got %r, expected an integer."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_addess_tree
+#: view:res.partner:0
+msgid "Partner Contacts"
+msgstr ""
+
+#. module: base
+#: field:base.module.update,add:0
+msgid "Number of modules added"
+msgstr ""
+
+#. module: base
+#: view:res.currency:0
+msgid "Price Accuracy"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Latvian / latviešu valoda"
+msgstr ""
+
+#. module: base
+#: view:res.config:0
+#: view:res.config.installer:0
+msgid "vsep"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "French / Français"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1049
+#, python-format
+msgid "The create method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: field:workflow.triggers,workitem_id:0
+msgid "Workitem"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.todo:0
+msgid "Set as Todo"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window.view,act_window_id:0
+#: view:ir.actions.actions:0
+#: field:ir.actions.todo,action_id:0
+#: field:ir.ui.menu,action:0
+#: field:ir.values,action_id:0
+#: selection:ir.values,key:0
+#: view:res.users:0
+msgid "Action"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Email Configuration"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_cron
+msgid "ir.cron"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid "Combination of rules"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Current Year without Century: %(y)s"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,trigger_obj_id:0
+msgid "Trigger On"
+msgstr ""
+
+#. module: base
+#: sql_constraint:ir.rule:0
+msgid "Rule must have at least one checked access right !"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.fj
+msgid "Fiji"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,size:0
+msgid "Size"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sd
+msgid "Sudan"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.fm
+msgid "Micronesia"
+msgstr ""
+
+#. module: base
+#: view:res.request.history:0
+msgid "Request History"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,menus:0
+#: field:ir.module.module,menus_by_module:0
+#: view:res.groups:0
+msgid "Menus"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Serbian (Latin) / srpski"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.il
+msgid "Israel"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.wizard,name:base.wizard_server_action_create
+msgid "Create Action"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_model_model
+#: model:ir.model,name:base.model_ir_model
+#: model:ir.ui.menu,name:base.ir_model_model_menu
+msgid "Objects"
+msgstr ""
+
+#. module: base
+#: field:res.lang,time_format:0
+msgid "Time Format"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Defined Reports"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+msgid "Report xml"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,modules:0
+#: model:ir.actions.act_window,name:base.action_module_open_categ
+#: model:ir.actions.act_window,name:base.open_module_tree
+#: view:ir.module.module:0
+#: model:ir.ui.menu,name:base.menu_management
+#: model:ir.ui.menu,name:base.menu_module_tree
+msgid "Modules"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+#: selection:workflow.activity,kind:0
+#: field:workflow.activity,subflow_id:0
+#: field:workflow.workitem,subflow_id:0
+msgid "Subflow"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_config
+msgid "res.config"
+msgstr ""
+
+#. module: base
+#: field:workflow.transition,signal:0
+msgid "Signal (button Name)"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_res_bank_form
+#: model:ir.ui.menu,name:base.menu_action_res_bank_form
+#: view:res.bank:0
+#: field:res.partner,bank_ids:0
+msgid "Banks"
+msgstr ""
+
+#. module: base
+#: view:res.log:0
+msgid "Unread"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,doall:0
+msgid "Repeat Missed"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,state:0
+msgid "Type of the Action that is to be executed"
+msgstr ""
+
+#. module: base
+#: field:ir.server.object.lines,server_id:0
+msgid "Object Mapping"
+msgstr ""
+
+#. module: base
+#: help:res.currency,rate:0
+#: help:res.currency.rate,rate:0
+msgid "The rate of the currency to the currency of rate 1"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.uk
+msgid "United Kingdom"
+msgstr ""
+
+#. module: base
+#: view:res.config:0
+#: view:res.config.users:0
+#: view:res.config.view:0
+msgid "res_config_contents"
+msgstr ""
+
+#. module: base
+#: help:res.partner.category,active:0
+msgid "The active field allows you to hide the category without removing it."
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Object:"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bw
+msgid "Botswana"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_title_partner
+#: model:ir.ui.menu,name:base.menu_partner_title_partner
+#: view:res.partner.title:0
+msgid "Partner Titles"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,auto_refresh:0
+msgid "Add an auto-refresh on the view"
+msgstr ""
+
+#. module: base
+#: help:res.partner,employee:0
+msgid "Check this box if the partner is an Employee."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_rml_content:0
+#: field:ir.actions.report.xml,report_rml_content_data:0
+msgid "RML content"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_workflow_workitem_form
+#: model:ir.ui.menu,name:base.menu_workflow_workitem
+msgid "Workitems"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,advice:0
+msgid "Advice"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_attachment
+msgid "ir.attachment"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3533
+#, python-format
+msgid ""
+"You cannot perform this operation. New Record Creation is not allowed for "
+"this object as this object is for reporting purpose."
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+msgid "- module,type,name,res_id,src,value"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Lithuanian / Lietuvių kalba"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,record_id:0
+msgid ""
+"Provide the field name where the record id is stored after the create "
+"operations. If it is empty, you can not track the new record."
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,relation:0
+msgid "For relationship fields, the technical name of the target model"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Indonesian / Bahasa Indonesia"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view,inherit_id:0
+msgid "Inherited View"
+msgstr ""
+
+#. module: base
+#: view:ir.translation:0
+msgid "Source Term"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_main_pm
+msgid "Project"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,web_icon_hover_data:0
+msgid "Web Icon Image (hover)"
+msgstr ""
+
+#. module: base
+#: view:base.module.import:0
+msgid "Module file successfully imported!"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.todo,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: base
+#: view:res.config.users:0
+msgid "Create User"
+msgstr ""
+
+#. module: base
+#: view:partner.clear.ids:0
+msgid "Want to Clear Ids ? "
+msgstr ""
+
+#. module: base
+#: field:publisher_warranty.contract,name:0
+#: field:publisher_warranty.contract.wizard,name:0
+msgid "Serial Key"
+msgstr ""
+
+#. module: base
+#: selection:res.request,priority:0
+msgid "Low"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_audit
+msgid "Audit"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.lc
+msgid "Saint Lucia"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract:0
+msgid "Maintenance Contract"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,trigger_obj_id:0
+msgid "Select the object from the model on which the workflow will executed."
+msgstr ""
+
+#. module: base
+#: field:res.partner,employee:0
+msgid "Employee"
+msgstr ""
+
+#. module: base
+#: field:ir.model.access,perm_create:0
+msgid "Create Access"
+msgstr ""
+
+#. module: base
+#: field:res.partner.address,state_id:0
+msgid "Fed. State"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,copy_object:0
+msgid "Copy Of"
+msgstr ""
+
+#. module: base
+#: field:ir.model,osv_memory:0
+msgid "In-memory model"
+msgstr ""
+
+#. module: base
+#: view:partner.clear.ids:0
+msgid "Clear Ids"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.io
+msgid "British Indian Ocean Territory"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,view:0
+#: field:res.config.view,view:0
+#: field:res.users,view:0
+msgid "Interface"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Field Mapping"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract:0
+msgid "Refresh Validation Dates"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+#: field:ir.model.fields,ttype:0
+msgid "Field Type"
+msgstr ""
+
+#. module: base
+#: field:res.country.state,code:0
+msgid "State Code"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,on_delete:0
+msgid "On delete"
+msgstr ""
+
+#. module: base
+#: selection:res.lang,direction:0
+msgid "Left-to-Right"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+#: field:res.lang,translatable:0
+msgid "Translatable"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.vn
+msgid "Vietnam"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,signature:0
+#: view:res.users:0
+#: field:res.users,signature:0
+msgid "Signature"
+msgstr ""
+
+#. module: base
+#: code:addons/fields.py:456
+#: code:addons/fields.py:654
+#: code:addons/fields.py:656
+#: code:addons/fields.py:658
+#: code:addons/fields.py:660
+#: code:addons/fields.py:662
+#: code:addons/fields.py:664
+#, python-format
+msgid "Not Implemented"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_widget_user
+msgid "res.widget.user"
+msgstr ""
+
+#. module: base
+#: field:res.partner.category,complete_name:0
+msgid "Full Name"
+msgstr ""
+
+#. module: base
+#: view:base.module.configuration:0
+msgid "_Ok"
+msgstr ""
+
+#. module: base
+#: help:ir.filters,user_id:0
+msgid "False means for every user"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:198
+#, python-format
+msgid "The name of the module must be unique !"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mz
+msgid "Mozambique"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_project_long_term
+msgid "Long Term Planning"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,message:0
+#: view:partner.sms.send:0
+#: field:partner.wizard.spam,text:0
+#: field:res.log,name:0
+msgid "Message"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window.view,multi:0
+msgid "On Multiple Doc."
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+#: field:res.partner,user_id:0
+msgid "Salesman"
+msgstr ""
+
+#. module: base
+#: field:res.partner,address:0
+#: view:res.partner.address:0
+msgid "Contacts"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3199
+#, python-format
+msgid ""
+"Unable to delete this document because it is used as a default property"
+msgstr ""
+
+#. module: base
+#: view:res.widget.wizard:0
+msgid "Add"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade_window
+#: model:ir.ui.menu,name:base.menu_view_base_module_upgrade
+msgid "Apply Scheduled Upgrades"
+msgstr ""
+
+#. module: base
+#: view:res.widget:0
+msgid "Widgets"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cz
+msgid "Czech Republic"
+msgstr ""
+
+#. module: base
+#: view:res.widget.wizard:0
+msgid "Widget Wizard"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.act_ir_actions_todo_form
+msgid ""
+"The configuration wizards are used to help you configure a new instance of "
+"OpenERP. They are launched during the installation of new modules, but you "
+"can choose to restart some wizards manually from this menu."
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:206
+#, python-format
+msgid ""
+"Please use the change password wizard (in User Preferences or User menu) to "
+"change your own password."
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1350
+#, python-format
+msgid "Insufficient fields for Calendar View!"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "Integer"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.report.xml,report_rml:0
+msgid ""
+"The path to the main report file (depending on Report Type) or NULL if the "
+"content is in another data field"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,company_id:0
+#: help:res.users,company_id:0
+msgid "The company this user is currently working for."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_wizard_ir_model_menu_create
+msgid "wizard.ir.model.menu.create"
+msgstr ""
+
+#. module: base
+#: view:workflow.transition:0
+msgid "Transition"
+msgstr ""
+
+#. module: base
+#: field:res.groups,menu_access:0
+msgid "Access Menu"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.na
+msgid "Namibia"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mn
+msgid "Mongolia"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Created Menus"
+msgstr ""
+
+#. module: base
+#: selection:ir.ui.view,type:0
+msgid "mdx"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bi
+msgid "Burundi"
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+#: view:base.module.import:0
+#: view:base.module.update:0
+#: view:publisher_warranty.contract.wizard:0
+#: view:res.request:0
+#: wizard_button:server.action.create,init,end:0
+#: wizard_button:server.action.create,step_1,end:0
+msgid "Close"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (MX) / Español (MX)"
+msgstr ""
+
+#. module: base
+#: view:res.log:0
+msgid "My Logs"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bt
+msgid "Bhutan"
+msgstr ""
+
+#. module: base
+#: help:ir.sequence,number_next:0
+msgid "Next number of this sequence"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_11
+msgid "Textile Suppliers"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.url,target:0
+msgid "This Window"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract:0
+msgid "Publisher Warranty Contracts"
+msgstr ""
+
+#. module: base
+#: help:res.log,name:0
+msgid "The logging message."
+msgstr ""
+
+#. module: base
+#: field:base.language.export,format:0
+msgid "File Format"
+msgstr ""
+
+#. module: base
+#: field:res.lang,iso_code:0
+msgid "ISO code"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_config_view
+msgid "res.config.view"
+msgstr ""
+
+#. module: base
+#: view:res.log:0
+#: field:res.log,read:0
+msgid "Read"
+msgstr ""
+
+#. module: base
+#: sql_constraint:res.country:0
+msgid "The name of the country must be unique !"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_country_state
+msgid ""
+"If you are working on the American market, you can manage the different "
+"federal states you are working on from here. Each state is attached to one "
+"country."
+msgstr ""
+
+#. module: base
+#: view:workflow.workitem:0
+msgid "Workflow Workitems"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.vc
+msgid "Saint Vincent & Grenadines"
+msgstr ""
+
+#. module: base
+#: field:partner.sms.send,password:0
+#: field:res.config.users,password:0
+#: field:res.users,password:0
+msgid "Password"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_model_fields
+#: view:ir.model:0
+#: field:ir.model,field_id:0
+#: model:ir.model,name:base.model_ir_model_fields
+#: view:ir.model.fields:0
+#: model:ir.ui.menu,name:base.ir_model_model_fields
+msgid "Fields"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_employee_form
+msgid "Employees"
+msgstr ""
+
+#. module: base
+#: help:res.log,read:0
+msgid ""
+"If this log item has been read, get() should not send it to the client"
+msgstr ""
+
+#. module: base
+#: field:res.company,rml_header2:0
+#: field:res.company,rml_header3:0
+msgid "RML Internal Header"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,search_view_id:0
+msgid "Search View Ref."
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,installed_version:0
+msgid "Latest version"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.res_partner_canal-act
+msgid ""
+"Track from where is coming your leads and opportunities by creating specific "
+"channels that will be maintained at the creation of a document in the "
+"system. Some examples of channels can be: Website, Phone Call, Reseller, etc."
+msgstr ""
+
+#. module: base
+#: model:res.partner.bank.type.field,name:base.bank_normal_field
+msgid "acc_number"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_address_form
+#: model:ir.ui.menu,name:base.menu_partner_address_form
+msgid "Addresses"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mm
+msgid "Myanmar"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Chinese (CN) / 简体中文"
+msgstr ""
+
+#. module: base
+#: field:res.bank,street:0
+#: field:res.partner.address,street:0
+#: field:res.partner.bank,street:0
+msgid "Street"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.yu
+msgid "Yugoslavia"
+msgstr ""
+
+#. module: base
+#: field:ir.model.data,name:0
+msgid "XML Identifier"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ca
+msgid "Canada"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module.dependency,state:0
+msgid "Unknown"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_res_users_my
+msgid "Change My Preferences"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_actions.py:164
+#, python-format
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: base
+#: field:partner.sms.send,text:0
+msgid "SMS Message"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cm
+msgid "Cameroon"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bf
+msgid "Burkina Faso"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.todo,state:0
+msgid "Skipped"
+msgstr ""
+
+#. module: base
+#: selection:ir.model.fields,state:0
+msgid "Custom Field"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,web:0
+msgid "Has a web component"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cc
+msgid "Cocos (Keeling) Islands"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,state:0
+#: selection:base.module.import,state:0
+#: selection:base.module.update,state:0
+msgid "init"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "11. %U or %W ==> 48 (49th week)"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner_bank_type_field
+msgid "Bank type fields"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Dutch / Nederlands"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_config.py:384
+#, python-format
+msgid ""
+"\n"
+"\n"
+"This addon is already installed on your system"
+msgstr ""
+
+#. module: base
+#: help:ir.cron,interval_number:0
+msgid "Repeat every x."
+msgstr ""
+
+#. module: base
+#: wizard_view:server.action.create,step_1:0
+#: wizard_field:server.action.create,step_1,report:0
+msgid "Select Report"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "1cm 28cm 20cm 28cm"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,maintainer:0
+msgid "Maintainer"
+msgstr ""
+
+#. module: base
+#: field:ir.sequence,suffix:0
+msgid "Suffix"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mo
+msgid "Macau"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.report.xml,name:base.res_partner_address_report
+msgid "Labels"
+msgstr ""
+
+#. module: base
+#: field:partner.wizard.spam,email_from:0
+msgid "Sender's email"
+msgstr ""
+
+#. module: base
+#: field:ir.default,field_name:0
+msgid "Object Field"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (PE) / Español (PE)"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "French (CH) / Français (CH)"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,action_id:0
+#: help:res.users,action_id:0
+msgid ""
+"If specified, this action will be opened at logon for this user, in addition "
+"to the standard menu."
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "Client Actions"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1806
+#, python-format
+msgid "The exists method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:336
+#, python-format
+msgid ""
+"You try to upgrade a module that depends on the module: %s.\n"
+"But this module is not available in your system."
+msgstr ""
+
+#. module: base
+#: field:workflow.transition,act_to:0
+msgid "Destination Activity"
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "Connect Events to Actions"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_update_translations
+msgid "base.update.translations"
+msgstr ""
+
+#. module: base
+#: field:ir.module.category,parent_id:0
+#: field:res.partner.category,parent_id:0
+msgid "Parent Category"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "Integer Big"
+msgstr ""
+
+#. module: base
+#: selection:res.partner.address,type:0
+#: selection:res.partner.title,domain:0
+#: view:res.users:0
+msgid "Contact"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_ui_menu
+msgid "ir.ui.menu"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.us
+msgid "United States"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Cancel Uninstall"
+msgstr ""
+
+#. module: base
+#: view:res.bank:0
+#: view:res.partner:0
+#: view:res.partner.address:0
+msgid "Communication"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+msgid "RML Report"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_server_object_lines
+msgid "ir.server.object.lines"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:531
+#, python-format
+msgid "Module %s: Invalid Quality Certificate"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.kw
+msgid "Kuwait"
+msgstr ""
+
+#. module: base
+#: field:workflow.workitem,inst_id:0
+msgid "Instance"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.report.xml,attachment:0
+msgid ""
+"This is the filename of the attachment used to store the printing result. "
+"Keep empty to not save the printed reports. You can use a python expression "
+"with the object and time variables."
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "Many2One"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ng
+msgid "Nigeria"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:250
+#, python-format
+msgid "For selection fields, the Selection Options must be given!"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_sms_send
+msgid "SMS Send"
+msgstr ""
+
+#. module: base
+#: field:res.company,user_ids:0
+msgid "Accepted Users"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,web_icon_data:0
+msgid "Web Icon Image"
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "Values for Event Type"
+msgstr ""
+
+#. module: base
+#: selection:ir.model.fields,select_level:0
+msgid "Always Searchable"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.hk
+msgid "Hong Kong"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,name:0
+msgid "Easy to Refer action by name e.g. One Sales Order -> Many Invoices"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_partner_address_form
+msgid ""
+"Customers (also called Partners in other areas of the system) helps you "
+"manage your address book of companies whether they are prospects, customers "
+"and/or suppliers. The partner form allows you to track and record all the "
+"necessary information to interact with your partners from the company "
+"address to their contacts as well as pricelists, and much more. If you "
+"installed the CRM, with the history tab, you can track all the interactions "
+"with a partner such as opportunities, emails, or sales orders issued."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ph
+msgid "Philippines"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ma
+msgid "Morocco"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "2. %a ,%A ==> Fri, Friday"
+msgstr ""
+
+#. module: base
+#: field:res.widget,content:0
+msgid "Content"
+msgstr ""
+
+#. module: base
+#: help:ir.rule,global:0
+msgid "If no group is specified the rule is global and applied to everyone"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.td
+msgid "Chad"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_workflow_transition
+msgid "workflow.transition"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%a - Abbreviated weekday name."
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Introspection report on objects"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pf
+msgid "Polynesia (French)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.dm
+msgid "Dominica"
+msgstr ""
+
+#. module: base
+#: sql_constraint:publisher_warranty.contract:0
+msgid ""
+"Your publisher warranty contract is already subscribed in the system !"
+msgstr ""
+
+#. module: base
+#: help:ir.cron,nextcall:0
+msgid "Next planned execution date for this scheduler"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,view:0
+#: help:res.users,view:0
+msgid "Choose between the simplified interface and the extended one"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.np
+msgid "Nepal"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:2307
+#, python-format
+msgid ""
+"Invalid value for reference field \"%s\" (last part must be a non-zero "
+"integer): \"%s\""
+msgstr ""
+
+#. module: base
+#: help:ir.cron,args:0
+msgid "Arguments to be passed to the method. e.g. (uid,)"
+msgstr ""
+
+#. module: base
+#: help:ir.ui.menu,groups_id:0
+msgid ""
+"If you have groups, the visibility of this menu will be based on these "
+"groups. If this field is empty, OpenERP will compute visibility based on the "
+"related object's read access."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_ui_view_custom
+#: model:ir.ui.menu,name:base.menu_action_ui_view_custom
+#: view:ir.ui.view.custom:0
+msgid "Customized Views"
+msgstr ""
+
+#. module: base
+#: view:partner.sms.send:0
+msgid "Bulk SMS send"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Seconde: %(sec)s"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_view_base_module_update
+msgid "Update Modules List"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:255
+#, python-format
+msgid ""
+"Unable to upgrade module \"%s\" because an external dependency is not met: %s"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:257
+#, python-format
+msgid ""
+"Please keep in mind that documents currently displayed may not be relevant "
+"after switching to another company. If you have unsaved changes, please make "
+"sure to save and close all forms before switching to a different company. "
+"(You can click on Cancel in the User Preferences now)"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.configuration.wizard:0
+msgid "Continue"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Thai / ภาษาไทย"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:158
+#, python-format
+msgid "Object %s does not exists"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Slovenian / slovenščina"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,attachment_use:0
+msgid "Reload from Attachment"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bv
+msgid "Bouvet Island"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,name:0
+msgid "Attachment Name"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,data:0
+#: field:base.language.import,data:0
+msgid "File"
+msgstr ""
+
+#. module: base
+#: view:res.config.users:0
+msgid "Add User"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade_install
+msgid "Module Upgrade Install"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_configuration_wizard
+msgid "ir.actions.configuration.wizard"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%b - Abbreviated month name."
+msgstr ""
+
+#. module: base
+#: field:res.partner,supplier:0
+#: view:res.partner.address:0
+#: field:res.partner.address,is_supplier_add:0
+#: model:res.partner.category,name:base.res_partner_category_8
+msgid "Supplier"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+#: selection:ir.actions.server,state:0
+msgid "Multi Actions"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+#: view:base.language.import:0
+#: view:wizard.ir.model.menu.create:0
+msgid "_Close"
+msgstr ""
+
+#. module: base
+#: field:multi_company.default,company_dest_id:0
+msgid "Default Company"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (EC) / Español (EC)"
+msgstr ""
+
+#. module: base
+#: help:ir.ui.view,xml_id:0
+msgid "ID of the view defined in xml file"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_module_import
+#: model:ir.ui.menu,name:base.menu_view_base_module_import
+msgid "Import Module"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.as
+msgid "American Samoa"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,res_model:0
+msgid "Model name of the object to open in the view window"
+msgstr ""
+
+#. module: base
+#: field:res.log,secondary:0
+msgid "Secondary Log"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,selectable:0
+msgid "Selectable"
+msgstr ""
+
+#. module: base
+#: view:res.request.link:0
+msgid "Request Link"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+#: selection:ir.attachment,type:0
+#: field:ir.module.module,url:0
+msgid "URL"
+msgstr ""
+
+#. module: base
+#: help:res.country,name:0
+msgid "The full name of the country."
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.server,state:0
+msgid "Iteration"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3448
+#: code:addons/orm.py:3532
+#, python-format
+msgid "UserError"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ae
+msgid "United Arab Emirates"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_crm_case_job_req_main
+msgid "Recruitment"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.re
+msgid "Reunion (French)"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:321
+#, python-format
+msgid ""
+"New column name must still start with x_ , because it is a custom field!"
+msgstr ""
+
+#. module: base
+#: view:ir.model.access:0
+#: view:ir.rule:0
+#: field:ir.rule,global:0
+msgid "Global"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mp
+msgid "Northern Mariana Islands"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sb
+msgid "Solomon Islands"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:490
+#: code:addons/orm.py:1897
+#: code:addons/orm.py:2972
+#: code:addons/orm.py:3165
+#: code:addons/orm.py:3365
+#: code:addons/orm.py:3817
+#, python-format
+msgid "AccessError"
+msgstr ""
+
+#. module: base
+#: view:res.request:0
+msgid "Waiting"
+msgstr ""
+
+#. module: base
+#: code:addons/__init__.py:834
+#, python-format
+msgid "Could not load base module"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "8. %I:%M:%S %p ==> 06:25:20 PM"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:1803
+#, python-format
+msgid "The copy method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: field:res.log,create_date:0
+msgid "Creation Date"
+msgstr ""
+
+#. module: base
+#: view:ir.translation:0
+#: model:ir.ui.menu,name:base.menu_translation
+msgid "Translations"
+msgstr ""
+
+#. module: base
+#: field:ir.sequence,padding:0
+msgid "Number padding"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+msgid "Report"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ua
+msgid "Ukraine"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.to
+msgid "Tonga"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_module_category
+#: view:ir.module.category:0
+msgid "Module Category"
+msgstr ""
+
+#. module: base
+#: view:partner.wizard.ean.check:0
+msgid "Ignore"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Reference Guide"
+msgstr ""
+
+#. module: base
+#: view:ir.ui.view:0
+msgid "Architecture"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ml
+msgid "Mali"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,email:0
+#: help:res.users,email:0
+msgid ""
+"If an email is provided, the user will be sent a message welcoming him.\n"
+"\n"
+"Warning: if \"email_from\" and \"smtp_server\" aren't configured, it won't "
+"be possible to email new users."
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Flemish (BE) / Vlaams (BE)"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,interval_number:0
+msgid "Interval Number"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tk
+msgid "Tokelau"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_xsl:0
+msgid "XSL path"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bn
+msgid "Brunei Darussalam"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+#: field:ir.actions.act_window,view_type:0
+#: field:ir.actions.act_window.view,view_mode:0
+#: field:ir.ui.view,type:0
+#: field:wizard.ir.model.menu.create.line,view_type:0
+msgid "View Type"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.next_id_2
+msgid "User Interface"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,create_date:0
+msgid "Date Created"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_todo
+msgid "ir.actions.todo"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_config.py:94
+#, python-format
+msgid "Couldn't find previous ir.actions.todo"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+msgid "General Settings"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_administration_shortcut
+msgid "Custom Shortcuts"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Vietnamese / Tiếng Việt"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.dz
+msgid "Algeria"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.be
+msgid "Belgium"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_osv_memory_autovacuum
+msgid "osv_memory.autovacuum"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,lang:0
+#: field:base.language.install,lang:0
+#: field:base.update.translations,lang:0
+#: field:ir.translation,lang:0
+#: field:res.config.users,context_lang:0
+#: field:res.partner,lang:0
+#: field:res.users,context_lang:0
+msgid "Language"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gm
+msgid "Gambia"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_res_company_form
+#: model:ir.model,name:base.model_res_company
+#: model:ir.ui.menu,name:base.menu_action_res_company_form
+#: model:ir.ui.menu,name:base.menu_res_company_global
+#: view:res.company:0
+#: field:res.config.users,company_ids:0
+#: view:res.users:0
+#: field:res.users,company_ids:0
+msgid "Companies"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%H - Hour (24-hour clock) [00,23]."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_widget
+msgid "res.widget"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:258
+#, python-format
+msgid "Model %s does not exist!"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_lang.py:159
+#, python-format
+msgid "You cannot delete the language which is User's Preferred Language !"
+msgstr ""
+
+#. module: base
+#: code:addons/fields.py:103
+#, python-format
+msgid "Not implemented get_memory method !"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+#: field:ir.actions.server,code:0
+#: selection:ir.actions.server,state:0
+msgid "Python Code"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_module_import.py:67
+#, python-format
+msgid "Can not create the module file: %s !"
+msgstr ""
+
+#. module: base
+#: model:ir.module.module,description:base.module_meta_information
+msgid "The kernel of OpenERP, needed for all installation."
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+#: view:base.module.import:0
+#: view:base.module.update:0
+#: view:base.module.upgrade:0
+#: view:base.update.translations:0
+#: view:partner.clear.ids:0
+#: view:partner.sms.send:0
+#: view:partner.wizard.spam:0
+#: view:publisher_warranty.contract.wizard:0
+#: view:res.widget.wizard:0
+msgid "Cancel"
+msgstr ""
+
+#. module: base
+#: selection:base.language.export,format:0
+msgid "PO File"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nt
+msgid "Neutral Zone"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Hindi / हिंदी"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+msgid "Custom"
+msgstr ""
+
+#. module: base
+#: view:res.request:0
+msgid "Current"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_9
+msgid "Components Supplier"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_res_users
+#: field:ir.default,uid:0
+#: model:ir.ui.menu,name:base.menu_action_res_users
+#: model:ir.ui.menu,name:base.menu_users
+#: view:res.groups:0
+#: field:res.groups,users:0
+#: view:res.users:0
+msgid "Users"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,published_version:0
+msgid "Published Version"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.is
+msgid "Iceland"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_action_window
+#: model:ir.ui.menu,name:base.menu_ir_action_window
+msgid "Window Actions"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%I - Hour (12-hour clock) [01,12]."
+msgstr ""
+
+#. module: base
+#: selection:publisher_warranty.contract.wizard,state:0
+msgid "Finished"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.de
+msgid "Germany"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Week of the year: %(woy)s"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_14
+msgid "Bad customers"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Reports :"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gy
+msgid "Guyana"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,view_type:0
+msgid ""
+"View type: set to 'tree' for a hierarchical tree view, or 'form' for other "
+"views"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_config.py:421
+#, python-format
+msgid "Click 'Continue' to configure the next addon..."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,record_id:0
+msgid "Create Id"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.hn
+msgid "Honduras"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,menu_tips:0
+#: help:res.users,menu_tips:0
+msgid ""
+"Check out this box if you want to always display tips on each menu action"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.eg
+msgid "Egypt"
+msgstr ""
+
+#. module: base
+#: field:ir.rule,perm_read:0
+msgid "Apply For Read"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,model_id:0
+msgid ""
+"Select the object on which the action will work (read, write, create)."
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_actions.py:629
+#, python-format
+msgid "Please specify server option --email-from !"
+msgstr ""
+
+#. module: base
+#: field:base.language.import,name:0
+msgid "Language Name"
+msgstr ""
+
+#. module: base
+#: selection:ir.property,type:0
+msgid "Boolean"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+msgid "Fields Description"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+#: view:ir.cron:0
+#: view:ir.model.access:0
+#: view:ir.model.data:0
+#: view:ir.model.fields:0
+#: view:ir.module.module:0
+#: view:ir.rule:0
+#: view:ir.ui.view:0
+#: view:ir.values:0
+#: view:res.partner:0
+#: view:res.partner.address:0
+#: view:workflow.activity:0
+msgid "Group By..."
+msgstr ""
+
+#. module: base
+#: view:ir.model.fields:0
+#: field:ir.model.fields,readonly:0
+#: field:res.partner.bank.type.field,readonly:0
+msgid "Readonly"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window.view,view_id:0
+#: field:ir.default,page:0
+#: selection:ir.translation,type:0
+#: field:wizard.ir.model.menu.create.line,view_id:0
+msgid "View"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,state:0
+#: selection:ir.module.module.dependency,state:0
+msgid "To be installed"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.act_window,display_menu_tip:0
+msgid ""
+"It gives the status if the tip has to be displayed or not when a user "
+"executes an action"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+#: model:ir.module.module,shortdesc:base.module_meta_information
+#: field:res.currency,base:0
+msgid "Base"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Telugu / తెలుగు"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.lr
+msgid "Liberia"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+#: view:ir.model:0
+#: view:res.groups:0
+#: view:res.partner:0
+#: field:res.partner,comment:0
+#: model:res.widget,title:base.note_widget
+msgid "Notes"
+msgstr ""
+
+#. module: base
+#: field:ir.config_parameter,value:0
+#: field:ir.property,value_binary:0
+#: field:ir.property,value_datetime:0
+#: field:ir.property,value_float:0
+#: field:ir.property,value_integer:0
+#: field:ir.property,value_reference:0
+#: field:ir.property,value_text:0
+#: selection:ir.server.object.lines,type:0
+#: field:ir.server.object.lines,value:0
+#: view:ir.values:0
+#: field:ir.values,value:0
+#: field:ir.values,value_unpickle:0
+msgid "Value"
+msgstr ""
+
+#. module: base
+#: field:ir.sequence,code:0
+#: field:ir.sequence.type,code:0
+#: selection:ir.translation,type:0
+#: field:res.bank,code:0
+#: field:res.partner.bank.type,code:0
+msgid "Code"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_config_installer
+msgid "res.config.installer"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mc
+msgid "Monaco"
+msgstr ""
+
+#. module: base
+#: selection:ir.cron,interval_type:0
+msgid "Minutes"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Help"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,menu_id:0
+#: help:res.users,menu_id:0
+msgid ""
+"If specified, the action will replace the standard menu for this user."
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.server,state:0
+msgid "Write Object"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_fundrising
+msgid "Fund Raising"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_sequence_type
+#: model:ir.ui.menu,name:base.menu_ir_sequence_type
+msgid "Sequence Codes"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (CO) / Español (CO)"
+msgstr ""
+
+#. module: base
+#: view:base.module.configuration:0
+msgid ""
+"All pending configuration wizards have been executed. You may restart "
+"individual wizards via the list of configuration wizards."
+msgstr ""
+
+#. module: base
+#: wizard_button:server.action.create,step_1,create:0
+msgid "Create"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Current Year with Century: %(year)s"
+msgstr ""
+
+#. module: base
+#: field:ir.exports,export_fields:0
+msgid "Export ID"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.fr
+msgid "France"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_log
+msgid "res.log"
+msgstr ""
+
+#. module: base
+#: help:ir.translation,module:0
+#: help:ir.translation,xml_id:0
+msgid "Maps to the ir_model_data for which this translation is provided."
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+#: field:workflow.activity,flow_stop:0
+msgid "Flow Stop"
+msgstr ""
+
+#. module: base
+#: selection:ir.cron,interval_type:0
+msgid "Weeks"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.af
+msgid "Afghanistan, Islamic State of"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_module_import.py:67
+#, python-format
+msgid "Error !"
+msgstr ""
+
+#. module: base
+#: model:res.partner.bank.type.field,name:base.bank_normal_field_contry
+msgid "country_id"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,interval_type:0
+msgid "Interval Unit"
+msgstr ""
+
+#. module: base
+#: field:publisher_warranty.contract,kind:0
+#: field:workflow.activity,kind:0
+msgid "Kind"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3775
+#, python-format
+msgid "This method does not exist anymore"
+msgstr ""
+
+#. module: base
+#: field:res.bank,fax:0
+#: field:res.partner.address,fax:0
+msgid "Fax"
+msgstr ""
+
+#. module: base
+#: field:res.lang,thousands_sep:0
+msgid "Thousands Separator"
+msgstr ""
+
+#. module: base
+#: field:res.request,create_date:0
+msgid "Created Date"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,loop_action:0
+msgid ""
+"Select the action that will be executed. Loop action will not be avaliable "
+"inside loop."
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Chinese (TW) / 正體字"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_request
+msgid "res.request"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+msgid "In Memory"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.todo:0
+msgid "Todo"
+msgstr ""
+
+#. module: base
+#: field:ir.attachment,datas:0
+msgid "File Content"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pa
+msgid "Panama"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,name:base.res_partner_title_ltd
+msgid "Ltd"
+msgstr ""
+
+#. module: base
+#: help:workflow.transition,group_id:0
+msgid ""
+"The group that a user must have to be authorized to validate this transition."
+msgstr ""
+
+#. module: base
+#: constraint:res.config.users:0
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gi
+msgid "Gibraltar"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_name:0
+msgid "Service Name"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pn
+msgid "Pitcairn Island"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid ""
+"We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_rule
+#: model:ir.ui.menu,name:base.menu_action_rule
+msgid "Record Rules"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,name:0
+#: field:res.users,name:0
+msgid "User Name"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Day of the year: %(doy)s"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+#: view:ir.model.fields:0
+#: view:workflow.activity:0
+msgid "Properties"
+msgstr ""
+
+#. module: base
+#: help:ir.sequence,padding:0
+msgid ""
+"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
+"get the required padding size."
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%A - Full weekday name."
+msgstr ""
+
+#. module: base
+#: selection:ir.cron,interval_type:0
+msgid "Months"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,search_view:0
+msgid "Search View"
+msgstr ""
+
+#. module: base
+#: sql_constraint:res.lang:0
+msgid "The code of the language must be unique !"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_attachment
+#: view:ir.actions.report.xml:0
+#: view:ir.attachment:0
+#: model:ir.ui.menu,name:base.menu_action_attachment
+msgid "Attachments"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_base_partner
+#: model:ir.ui.menu,name:base.menu_sale_config_sales
+#: model:ir.ui.menu,name:base.menu_sales
+msgid "Sales"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,child_ids:0
+msgid "Other Actions"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.todo,state:0
+#: view:res.config.users:0
+msgid "Done"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,name:base.res_partner_title_miss
+msgid "Miss"
+msgstr ""
+
+#. module: base
+#: view:ir.model.access:0
+#: field:ir.model.access,perm_write:0
+#: view:ir.rule:0
+msgid "Write Access"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%m - Month number [01,12]."
+msgstr ""
+
+#. module: base
+#: field:res.bank,city:0
+#: field:res.partner,city:0
+#: field:res.partner.address,city:0
+#: field:res.partner.bank,city:0
+msgid "City"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.qa
+msgid "Qatar"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.it
+msgid "Italy"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.todo:0
+#: selection:ir.actions.todo,state:0
+msgid "To Do"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Estonian / Eesti keel"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,email:0
+#: field:res.partner,email:0
+#: field:res.users,email:0
+msgid "E-mail"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "GPL-3 or later version"
+msgstr ""
+
+#. module: base
+#: field:workflow.activity,action:0
+msgid "Python Action"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "English (US)"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_model_data
+#: view:ir.model.data:0
+#: model:ir.ui.menu,name:base.ir_model_data_menu
+msgid "Object Identifiers"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_partner_title_partner
+msgid ""
+"Manage the partner titles you want to have available in your system. The "
+"partner titles is the legal status of the company: Private Limited, SA, etc."
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid "To browse official translations, you can start with these links:"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:484
+#, python-format
+msgid ""
+"You can not read this document (%s) ! Be sure your user belongs to one of "
+"these groups: %s."
+msgstr ""
+
+#. module: base
+#: view:res.bank:0
+#: field:res.config.users,address_id:0
+#: view:res.partner.address:0
+#: view:res.users:0
+#: field:res.users,address_id:0
+msgid "Address"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,latest_version:0
+msgid "Installed version"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Mongolian / монгол"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mr
+msgid "Mauritania"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_translation
+msgid "ir.translation"
+msgstr ""
+
+#. module: base
+#: view:base.module.update:0
+msgid "Module update result"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+#: field:workflow.workitem,act_id:0
+msgid "Activity"
+msgstr ""
+
+#. module: base
+#: view:res.partner:0
+#: view:res.partner.address:0
+msgid "Postal Address"
+msgstr ""
+
+#. module: base
+#: field:res.company,parent_id:0
+msgid "Parent Company"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (CR) / Español (CR)"
+msgstr ""
+
+#. module: base
+#: field:res.currency.rate,rate:0
+msgid "Rate"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cg
+msgid "Congo"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "Examples"
+msgstr ""
+
+#. module: base
+#: field:ir.default,value:0
+msgid "Default Value"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_tools
+msgid "Tools"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.kn
+msgid "Saint Kitts & Nevis Anguilla"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_currency.py:100
+#, python-format
+msgid ""
+"No rate found \n"
+"for the currency: %s \n"
+"at the date: %s"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_ui_view_custom
+msgid ""
+"Customized views are used when users reorganize the content of their "
+"dashboard views (via web client)"
+msgstr ""
+
+#. module: base
+#: field:ir.model,name:0
+#: field:ir.model.fields,model:0
+#: field:ir.values,model:0
+msgid "Object Name"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,srcmodel_id:0
+msgid ""
+"Object in which you want to create / write the object. If it is empty then "
+"refer to the Object field."
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+#: selection:ir.module.module,state:0
+#: selection:ir.module.module.dependency,state:0
+msgid "Not Installed"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+#: field:workflow.activity,out_transitions:0
+msgid "Outgoing Transitions"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,icon:0
+msgid "Icon"
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,model_id:0
+msgid "The model this field belongs to"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.mq
+msgid "Martinique (French)"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence.type:0
+msgid "Sequences Type"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_request-act
+#: model:ir.ui.menu,name:base.menu_res_request_act
+#: model:ir.ui.menu,name:base.menu_resquest_ref
+#: view:res.request:0
+msgid "Requests"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ye
+msgid "Yemen"
+msgstr ""
+
+#. module: base
+#: selection:workflow.activity,split_mode:0
+msgid "Or"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_log_act_window
+#: model:ir.ui.menu,name:base.menu_res_log_act_window
+msgid "Client Logs"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.al
+msgid "Albania"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ws
+msgid "Samoa"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_lang.py:161
+#, python-format
+msgid ""
+"You cannot delete the language which is Active !\n"
+"Please de-activate the language first."
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+#: view:base.module.import:0
+msgid ""
+"Please be patient, this operation may take a few minutes (depending on the "
+"number of modules currently installed)..."
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,child_id:0
+msgid "Child IDs"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_actions.py:713
+#: code:addons/base/ir/ir_actions.py:716
+#, python-format
+msgid "Problem in configuration `Record Id` in Server Action!"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:2306
+#: code:addons/orm.py:2316
+#, python-format
+msgid "ValidateError"
+msgstr ""
+
+#. module: base
+#: view:base.module.import:0
+#: view:base.module.update:0
+msgid "Open Modules"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_res_bank_form
+msgid "Manage bank records you want to be used in the system."
+msgstr ""
+
+#. module: base
+#: view:base.module.import:0
+msgid "Import module"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,loop_action:0
+msgid "Loop Action"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.report.xml,report_file:0
+msgid ""
+"The path to the main report file (depending on Report Type) or NULL if the "
+"content is in another field"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.la
+msgid "Laos"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.server,state:0
+#: field:res.config.users,user_email:0
+#: field:res.users,user_email:0
+msgid "Email"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,action_id:0
+#: field:res.users,action_id:0
+msgid "Home Action"
+msgstr ""
+
+#. module: base
+#: code:addons/custom.py:558
+#, python-format
+msgid ""
+"The sum of the data (2nd field) is null.\n"
+"We can't draw a pie chart !"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_lunch_reporting
+#: model:ir.ui.menu,name:base.menu_project_report
+#: model:ir.ui.menu,name:base.menu_report_association
+#: model:ir.ui.menu,name:base.menu_report_marketing
+#: model:ir.ui.menu,name:base.menu_reporting
+#: model:ir.ui.menu,name:base.next_id_64
+#: model:ir.ui.menu,name:base.next_id_73
+#: model:ir.ui.menu,name:base.reporting_menu
+msgid "Reporting"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tg
+msgid "Togo"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "Other Proprietary"
+msgstr ""
+
+#. module: base
+#: selection:workflow.activity,kind:0
+msgid "Stop All"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:412
+#, python-format
+msgid "The read_group method is not implemented on this object !"
+msgstr ""
+
+#. module: base
+#: view:ir.model.data:0
+msgid "Updatable"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "3. %x ,%X ==> 12/05/08, 18:25:20"
+msgstr ""
+
+#. module: base
+#: selection:ir.model.fields,on_delete:0
+msgid "Cascade"
+msgstr ""
+
+#. module: base
+#: field:workflow.transition,group_id:0
+msgid "Group Required"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.configuration.wizard:0
+msgid "Next Configuration Step"
+msgstr ""
+
+#. module: base
+#: field:res.groups,comment:0
+msgid "Comment"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ro
+msgid "Romania"
+msgstr ""
+
+#. module: base
+#: help:ir.cron,doall:0
+msgid ""
+"Enable this if you want to execute missed occurences as soon as the server "
+"restarts."
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "Start update"
+msgstr ""
+
+#. module: base
+#: code:addons/base/publisher_warranty/publisher_warranty.py:144
+#, python-format
+msgid "Contract validation error"
+msgstr ""
+
+#. module: base
+#: field:res.country.state,name:0
+msgid "State Name"
+msgstr ""
+
+#. module: base
+#: field:workflow.activity,join_mode:0
+msgid "Join Mode"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,context_tz:0
+#: field:res.users,context_tz:0
+msgid "Timezone"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_report_xml
+#: selection:ir.ui.menu,action:0
+msgid "ir.actions.report.xml"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,shortcut:base.res_partner_title_miss
+msgid "Mss"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_ui_view
+msgid "ir.ui.view"
+msgstr ""
+
+#. module: base
+#: constraint:res.partner:0
+msgid "Error ! You can not create recursive associated members."
+msgstr ""
+
+#. module: base
+#: help:res.lang,code:0
+msgid "This field is used to set/get locales for user"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_2
+msgid "OpenERP Partners"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_hr_manager
+msgid "HR Manager Dashboard"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:253
+#, python-format
+msgid ""
+"Unable to install module \"%s\" because an external dependency is not met: %s"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Search modules"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.by
+msgid "Belarus"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,name:0
+#: field:ir.actions.act_window_close,name:0
+#: field:ir.actions.actions,name:0
+#: field:ir.actions.server,name:0
+#: field:ir.actions.url,name:0
+#: field:ir.filters,name:0
+msgid "Action Name"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_res_users
+msgid ""
+"Create and manage users that will connect to the system. Users can be "
+"deactivated should there be a period of time during which they will/should "
+"not connect to the system. You can assign them groups in order to give them "
+"specific access to the applications they need to use in the system."
+msgstr ""
+
+#. module: base
+#: selection:res.request,priority:0
+msgid "Normal"
+msgstr ""
+
+#. module: base
+#: field:res.bank,street2:0
+#: field:res.partner.address,street2:0
+msgid "Street2"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_view_base_module_update
+msgid "Module Update"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_module_upgrade.py:95
+#, python-format
+msgid "Following modules are not installed or unknown: %s"
+msgstr ""
+
+#. module: base
+#: view:ir.cron:0
+#: field:ir.cron,user_id:0
+#: view:ir.filters:0
+#: field:ir.filters,user_id:0
+#: field:ir.ui.view.custom,user_id:0
+#: field:ir.values,user_id:0
+#: field:res.log,user_id:0
+#: field:res.partner.event,user_id:0
+#: view:res.users:0
+#: field:res.widget.user,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pr
+msgid "Puerto Rico"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+msgid "Open Window"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,auto_search:0
+msgid "Auto Search"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,filter:0
+msgid "Filter"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,shortcut:base.res_partner_title_madam
+msgid "Ms."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ch
+msgid "Switzerland"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gd
+msgid "Grenada"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.wf
+msgid "Wallis and Futuna Islands"
+msgstr ""
+
+#. module: base
+#: selection:server.action.create,init,type:0
+msgid "Open Report"
+msgstr ""
+
+#. module: base
+#: field:res.currency,rounding:0
+msgid "Rounding factor"
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+msgid "Load"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,name:0
+#: help:res.users,name:0
+msgid "The new user's real name, used for searching and most listings"
+msgstr ""
+
+#. module: base
+#: code:addons/osv.py:154
+#: code:addons/osv.py:156
+#, python-format
+msgid "Integrity Error"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_wizard_screen
+msgid "ir.wizard.screen"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:223
+#, python-format
+msgid "Size of the field can never be less than 1 !"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.so
+msgid "Somalia"
+msgstr ""
+
+#. module: base
+#: selection:publisher_warranty.contract,state:0
+msgid "Terminated"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_13
+msgid "Important customers"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "Update Terms"
+msgstr ""
+
+#. module: base
+#: field:partner.sms.send,mobile_to:0
+#: field:res.request,act_to:0
+#: field:res.request.history,act_to:0
+msgid "To"
+msgstr ""
+
+#. module: base
+#: view:ir.cron:0
+#: field:ir.cron,args:0
+msgid "Arguments"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:716
+#, python-format
+msgid "Database ID doesn't exist: %s : %s"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "GPL Version 2"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,license:0
+msgid "GPL Version 3"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:836
+#, python-format
+msgid "key '%s' not found in selection field '%s'"
+msgstr ""
+
+#. module: base
+#: view:partner.wizard.ean.check:0
+msgid "Correct EAN13"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:2317
+#, python-format
+msgid "The value \"%s\" for the field \"%s\" is not in the selection"
+msgstr ""
+
+#. module: base
+#: field:res.partner,customer:0
+#: view:res.partner.address:0
+#: field:res.partner.address,is_customer_add:0
+#: model:res.partner.category,name:base.res_partner_category_0
+msgid "Customer"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (NI) / Español (NI)"
+msgstr ""
+
+#. module: base
+#: field:ir.module.module,shortdesc:0
+msgid "Short Description"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,context:0
+#: field:ir.filters,context:0
+msgid "Context Value"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Hour 00->24: %(h24)s"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,nextcall:0
+msgid "Next Execution Date"
+msgstr ""
+
+#. module: base
+#: help:multi_company.default,field_id:0
+msgid "Select field property"
+msgstr ""
+
+#. module: base
+#: field:res.request.history,date_sent:0
+msgid "Date sent"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Month: %(month)s"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window.view,sequence:0
+#: field:ir.actions.server,sequence:0
+#: field:ir.actions.todo,sequence:0
+#: view:ir.cron:0
+#: view:ir.sequence:0
+#: field:ir.ui.menu,sequence:0
+#: view:ir.ui.view:0
+#: field:ir.ui.view,priority:0
+#: field:ir.ui.view_sc,sequence:0
+#: field:multi_company.default,sequence:0
+#: field:res.partner.bank,sequence:0
+#: field:res.widget.user,sequence:0
+#: field:wizard.ir.model.menu.create.line,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tn
+msgid "Tunisia"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_mrp_root
+msgid "Manufacturing"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.km
+msgid "Comoros"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_server_action
+#: view:ir.actions.server:0
+#: model:ir.ui.menu,name:base.menu_server_action
+msgid "Server Actions"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Cancel Install"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,selection:0
+msgid "Selection Options"
+msgstr ""
+
+#. module: base
+#: field:res.partner.category,parent_right:0
+msgid "Right parent"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "Legends for Date and Time Formats"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.server,state:0
+msgid "Copy Object"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:581
+#, python-format
+msgid ""
+"Group(s) cannot be deleted, because some user(s) still belong to them: %s !"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_country_state
+#: model:ir.ui.menu,name:base.menu_country_state_partner
+msgid "Fed. States"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+#: view:res.groups:0
+msgid "Access Rules"
+msgstr ""
+
+#. module: base
+#: field:ir.default,ref_table:0
+msgid "Table Ref."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,res_model:0
+#: field:ir.actions.report.xml,model:0
+#: field:ir.actions.server,model_id:0
+#: field:ir.actions.wizard,model:0
+#: field:ir.cron,model:0
+#: field:ir.default,field_tbl:0
+#: field:ir.filters,model_id:0
+#: field:ir.model,model:0
+#: view:ir.model.access:0
+#: field:ir.model.access,model_id:0
+#: view:ir.model.data:0
+#: field:ir.model.data,model:0
+#: view:ir.model.fields:0
+#: view:ir.rule:0
+#: field:ir.rule,model_id:0
+#: selection:ir.translation,type:0
+#: view:ir.ui.view:0
+#: field:ir.ui.view,model:0
+#: view:ir.values:0
+#: field:ir.values,model_id:0
+#: field:multi_company.default,object_id:0
+#: field:res.log,res_model:0
+#: field:res.request.link,object:0
+#: field:workflow.triggers,model:0
+msgid "Object"
+msgstr ""
+
+#. module: base
+#: code:addons/osv.py:151
+#, python-format
+msgid ""
+"\n"
+"\n"
+"[object with reference: %s - %s]"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_default
+msgid "ir.default"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Minute: %(min)s"
+msgstr ""
+
+#. module: base
+#: view:base.update.translations:0
+#: model:ir.actions.act_window,name:base.action_wizard_update_translations
+#: model:ir.ui.menu,name:base.menu_wizard_update_translations
+msgid "Synchronize Translations"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.next_id_10
+msgid "Scheduler"
+msgstr ""
+
+#. module: base
+#: help:ir.cron,numbercall:0
+msgid ""
+"Number of time the function is called,\n"
+"a negative number indicates no limit"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:331
+#, python-format
+msgid ""
+"Changing the type of a column is not yet supported. Please drop it and "
+"create it again!"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view_sc,user_id:0
+msgid "User Ref."
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:580
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: base
+#: model:res.widget,title:base.google_maps_widget
+msgid "Google Maps"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_base_config
+#: model:ir.ui.menu,name:base.menu_config
+#: model:ir.ui.menu,name:base.menu_event_config
+#: model:ir.ui.menu,name:base.menu_lunch_survey_root
+#: model:ir.ui.menu,name:base.menu_marketing_config_association
+#: model:ir.ui.menu,name:base.menu_marketing_config_root
+#: view:res.company:0
+msgid "Configuration"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_publisher_warranty_contract_wizard
+msgid "publisher_warranty.contract.wizard"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,expression:0
+msgid "Loop Expression"
+msgstr ""
+
+#. module: base
+#: field:publisher_warranty.contract,date_start:0
+msgid "Starting Date"
+msgstr ""
+
+#. module: base
+#: help:res.partner,website:0
+msgid "Website of Partner"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_5
+msgid "Gold Partner"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner
+#: field:res.company,partner_id:0
+#: view:res.partner.address:0
+#: field:res.partner.bank,partner_id:0
+#: field:res.partner.event,partner_id:0
+#: selection:res.partner.title,domain:0
+#: model:res.request.link,name:base.req_link_partner
+msgid "Partner"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tr
+msgid "Turkey"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.fk
+msgid "Falkland Islands"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.lb
+msgid "Lebanon"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+#: field:ir.actions.report.xml,report_type:0
+msgid "Report Type"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.todo,state:0
+#: view:ir.module.module:0
+#: field:ir.module.module,state:0
+#: field:ir.module.module.dependency,state:0
+#: field:publisher_warranty.contract,state:0
+#: field:res.bank,state:0
+#: view:res.country.state:0
+#: field:res.partner.bank,state_id:0
+#: view:res.request:0
+#: field:res.request,state:0
+#: field:workflow.instance,state:0
+#: field:workflow.workitem,state:0
+msgid "State"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Galician / Galego"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.no
+msgid "Norway"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "4. %b, %B ==> Dec, December"
+msgstr ""
+
+#. module: base
+#: view:base.language.install:0
+#: model:ir.ui.menu,name:base.menu_view_base_language_install
+msgid "Load an Official Translation"
+msgstr ""
+
+#. module: base
+#: view:res.currency:0
+msgid "Miscelleanous"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_10
+msgid "Open Source Service Company"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.kg
+msgid "Kyrgyz Republic (Kyrgyzstan)"
+msgstr ""
+
+#. module: base
+#: selection:res.request,state:0
+msgid "waiting"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_file:0
+msgid "Report file"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_workflow_triggers
+msgid "workflow.triggers"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:62
+#, python-format
+msgid "Invalid search criterions"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+msgid "Created"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.wizard,multi:0
+msgid ""
+"If set to true, the wizard will not be displayed on the right toolbar of a "
+"form view."
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+msgid "- type,name,res_id,src,value"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.hm
+msgid "Heard and McDonald Islands"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,view_id:0
+msgid "View Ref."
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Selection"
+msgstr ""
+
+#. module: base
+#: field:res.company,rml_header1:0
+msgid "Report Header"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,type:0
+#: field:ir.actions.act_window_close,type:0
+#: field:ir.actions.actions,type:0
+#: field:ir.actions.report.xml,type:0
+#: view:ir.actions.server:0
+#: field:ir.actions.server,state:0
+#: field:ir.actions.server,type:0
+#: field:ir.actions.url,type:0
+#: field:ir.actions.wizard,type:0
+msgid "Action Type"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/module.py:268
+#, python-format
+msgid ""
+"You try to install module '%s' that depends on module '%s'.\n"
+"But the latter module is not available in your system."
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+#: model:ir.actions.act_window,name:base.action_view_base_import_language
+#: model:ir.ui.menu,name:base.menu_view_base_import_language
+msgid "Import Translation"
+msgstr ""
+
+#. module: base
+#: field:res.partner.bank.type,field_ids:0
+msgid "Type fields"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+#: field:ir.module.module,category_id:0
+msgid "Category"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+#: selection:ir.attachment,type:0
+#: selection:ir.property,type:0
+msgid "Binary"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,sms:0
+#: selection:ir.actions.server,state:0
+msgid "SMS"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cr
+msgid "Costa Rica"
+msgstr ""
+
+#. module: base
+#: view:workflow.activity:0
+msgid "Conditions"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_other_form
+msgid "Other Partners"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_currency_form
+#: model:ir.ui.menu,name:base.menu_action_currency_form
+#: view:res.currency:0
+msgid "Currencies"
+msgstr ""
+
+#. module: base
+#: sql_constraint:res.groups:0
+msgid "The name of the group must be unique !"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Hour 00->12: %(h12)s"
+msgstr ""
+
+#. module: base
+#: help:res.partner.address,active:0
+msgid "Uncheck the active field to hide the contact."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_widget_wizard
+msgid "Add a widget for User"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.dk
+msgid "Denmark"
+msgstr ""
+
+#. module: base
+#: field:res.country,code:0
+msgid "Country Code"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_workflow_instance
+msgid "workflow.instance"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:278
+#, python-format
+msgid "Unknown attribute %s in %s "
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "10. %S ==> 20"
+msgstr ""
+
+#. module: base
+#: code:addons/fields.py:106
+#, python-format
+msgid "undefined get method !"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Norwegian Bokmål / Norsk bokmål"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,new_password:0
+#: help:res.users,new_password:0
+msgid ""
+"Only specify a value if you want to change the user password. This user will "
+"have to logout and login again!"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,name:base.res_partner_title_madam
+msgid "Madam"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ee
+msgid "Estonia"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.dashboard
+msgid "Dashboards"
+msgstr ""
+
+#. module: base
+#: help:ir.attachment,type:0
+msgid "Binary File or external URL"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,new_password:0
+#: field:res.users,new_password:0
+msgid "Change password"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nl
+msgid "Netherlands"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.next_id_4
+msgid "Low Level Objects"
+msgstr ""
+
+#. module: base
+#: view:res.company:0
+msgid "Your Logo - Use a size of about 450x150 pixels."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_values
+msgid "ir.values"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Occitan (FR, post 1500) / Occitan"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.open_module_tree
+msgid ""
+"You can install new modules in order to activate new features, menu, reports "
+"or data in your OpenERP instance. To install some modules, click on the "
+"button \"Schedule for Installation\" from the form view, then click on "
+"\"Apply Scheduled Upgrades\" to migrate your system."
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_emails
+#: model:ir.ui.menu,name:base.menu_mail_gateway
+msgid "Emails"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cd
+msgid "Congo, The Democratic Republic of the"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Malayalam / മലയാളം"
+msgstr ""
+
+#. module: base
+#: view:res.request:0
+#: field:res.request,body:0
+#: field:res.request.history,req_id:0
+msgid "Request"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.jp
+msgid "Japan"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,numbercall:0
+msgid "Number of Calls"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+#: field:base.module.upgrade,module_info:0
+msgid "Modules to update"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,sequence:0
+msgid ""
+"Important when you deal with multiple actions, the execution order will be "
+"decided based on this, low number is higher priority."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,header:0
+msgid "Add RML header"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gr
+msgid "Greece"
+msgstr ""
+
+#. module: base
+#: field:res.request,trigger_date:0
+msgid "Trigger Date"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Croatian / hrvatski jezik"
+msgstr ""
+
+#. module: base
+#: field:base.language.install,overwrite:0
+msgid "Overwrite Existing Terms"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,code:0
+msgid "Python code to be executed"
+msgstr ""
+
+#. module: base
+#: sql_constraint:res.country:0
+msgid "The code of the country must be unique !"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module.dependency,state:0
+msgid "Uninstallable"
+msgstr ""
+
+#. module: base
+#: view:res.partner.category:0
+msgid "Partner Category"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+#: selection:ir.actions.server,state:0
+msgid "Trigger"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_module_update
+msgid "Update Module"
+msgstr ""
+
+#. module: base
+#: view:ir.model.fields:0
+#: field:ir.model.fields,translate:0
+msgid "Translate"
+msgstr ""
+
+#. module: base
+#: field:res.request.history,body:0
+msgid "Body"
+msgstr ""
+
+#. module: base
+#: view:partner.wizard.spam:0
+msgid "Send Email"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,menu_id:0
+#: field:res.users,menu_id:0
+msgid "Menu Action"
+msgstr ""
+
+#. module: base
+#: help:ir.model.fields,selection:0
+msgid ""
+"List of options for a selection field, specified as a Python expression "
+"defining a list of (key, label) pairs. For example: "
+"[('blue','Blue'),('yellow','Yellow')]"
+msgstr ""
+
+#. module: base
+#: selection:base.language.export,state:0
+msgid "choose"
+msgstr ""
+
+#. module: base
+#: help:ir.model,osv_memory:0
+msgid ""
+"Indicates whether this object model lives in memory only, i.e. is not "
+"persisted (osv.osv_memory)"
+msgstr ""
+
+#. module: base
+#: field:res.partner,child_ids:0
+#: field:res.request,ref_partner_id:0
+msgid "Partner Ref."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_supplier_form
+#: model:ir.ui.menu,name:base.menu_procurement_management_supplier_name
+#: view:res.partner:0
+msgid "Suppliers"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract.wizard:0
+msgid "Register"
+msgstr ""
+
+#. module: base
+#: field:res.request,ref_doc2:0
+msgid "Document Ref 2"
+msgstr ""
+
+#. module: base
+#: field:res.request,ref_doc1:0
+msgid "Document Ref 1"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ga
+msgid "Gabon"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_model_data
+msgid "ir.model.data"
+msgstr ""
+
+#. module: base
+#: view:ir.model:0
+#: view:ir.rule:0
+#: view:res.groups:0
+msgid "Access Rights"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gl
+msgid "Greenland"
+msgstr ""
+
+#. module: base
+#: field:res.partner.bank,acc_number:0
+msgid "Account Number"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "1. %c ==> Fri Dec 5 18:25:20 2008"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.nc
+msgid "New Caledonia (French)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cy
+msgid "Cyprus"
+msgstr ""
+
+#. module: base
+#: view:base.module.import:0
+msgid ""
+"This wizard helps you add a new language to you OpenERP system. After "
+"loading a new language it becomes available as default interface language "
+"for users and partners."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,subject:0
+#: field:partner.wizard.spam,subject:0
+#: field:res.request,name:0
+msgid "Subject"
+msgstr ""
+
+#. module: base
+#: field:res.request,act_from:0
+#: field:res.request.history,act_from:0
+msgid "From"
+msgstr ""
+
+#. module: base
+#: view:res.users:0
+msgid "Preferences"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_consumers0
+msgid "Consumers"
+msgstr ""
+
+#. module: base
+#: view:res.config:0
+#: wizard_button:server.action.create,init,step_1:0
+msgid "Next"
+msgstr ""
+
+#. module: base
+#: help:ir.cron,function:0
+msgid ""
+"Name of the method to be called on the object when this scheduler is "
+"executed."
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:219
+#, python-format
+msgid ""
+"The Selection Options expression is must be in the [('key','Label'), ...] "
+"format!"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.report.xml:0
+msgid "Miscellaneous"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cn
+msgid "China"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:516
+#, python-format
+msgid ""
+"--\n"
+"%(name)s %(email)s\n"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.eh
+msgid "Western Sahara"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_workflow
+msgid "workflow"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_res_company_form
+msgid ""
+"Create and manage the companies that will be managed by OpenERP from here. "
+"Shops or subsidiaries can be created and maintained from here."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.id
+msgid "Indonesia"
+msgstr ""
+
+#. module: base
+#: view:base.update.translations:0
+msgid ""
+"This wizard will detect new terms to translate in the application, so that "
+"you can then add translations manually or perform a complete export (as a "
+"template for a new language example)."
+msgstr ""
+
+#. module: base
+#: help:multi_company.default,expression:0
+msgid ""
+"Expression, must be True to match\n"
+"use context.get or user (browse)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bg
+msgid "Bulgaria"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract.wizard:0
+msgid "Publisher warranty contract successfully registered!"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ao
+msgid "Angola"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tf
+msgid "French Southern Territories"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_currency
+#: field:res.company,currency_id:0
+#: field:res.company,currency_ids:0
+#: view:res.currency:0
+#: field:res.currency,name:0
+#: field:res.currency.rate,currency_id:0
+msgid "Currency"
+msgstr ""
+
+#. module: base
+#: field:res.partner.canal,name:0
+msgid "Channel Name"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "5. %y, %Y ==> 08, 2008"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,shortcut:base.res_partner_title_ltd
+msgid "ltd"
+msgstr ""
+
+#. module: base
+#: field:ir.values,res_id:0
+#: field:res.log,res_id:0
+msgid "Object ID"
+msgstr ""
+
+#. module: base
+#: view:res.company:0
+msgid "Landscape"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_administration
+msgid "Administration"
+msgstr ""
+
+#. module: base
+#: view:base.module.update:0
+msgid "Click on Update below to start the process..."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ir
+msgid "Iran"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_widget_user_act_window
+#: model:ir.ui.menu,name:base.menu_res_widget_user_act_window
+msgid "Widgets per User"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Slovak / Slovenský jazyk"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,state:0
+#: field:ir.ui.menu,icon_pict:0
+#: field:publisher_warranty.contract.wizard,state:0
+msgid "unknown"
+msgstr ""
+
+#. module: base
+#: field:res.currency,symbol:0
+msgid "Symbol"
+msgstr ""
+
+#. module: base
+#: help:res.config.users,login:0
+#: help:res.users,login:0
+msgid "Used to log into the system"
+msgstr ""
+
+#. module: base
+#: view:base.update.translations:0
+msgid "Synchronize Translation"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view_sc,res_id:0
+msgid "Resource Ref."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ki
+msgid "Kiribati"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.iq
+msgid "Iraq"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_association
+msgid "Association"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cl
+msgid "Chile"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_address_book
+#: model:ir.ui.menu,name:base.menu_config_address_book
+#: model:ir.ui.menu,name:base.menu_procurement_management_supplier
+msgid "Address Book"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_sequence_type
+msgid "ir.sequence.type"
+msgstr ""
+
+#. module: base
+#: selection:base.language.export,format:0
+msgid "CSV File"
+msgstr ""
+
+#. module: base
+#: field:res.company,account_no:0
+msgid "Account No."
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_lang.py:157
+#, python-format
+msgid "Base Language 'en_US' can not be deleted !"
+msgstr ""
+
+#. module: base
+#: selection:ir.model,state:0
+msgid "Base Object"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "Dependencies :"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,field_description:0
+msgid "Field Label"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.dj
+msgid "Djibouti"
+msgstr ""
+
+#. module: base
+#: field:ir.translation,value:0
+msgid "Translation Value"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ag
+msgid "Antigua and Barbuda"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:3166
+#, python-format
+msgid ""
+"Operation prohibited by access rules, or performed on an already deleted "
+"document (Operation: %s, Document type: %s)."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.zr
+msgid "Zaire"
+msgstr ""
+
+#. module: base
+#: field:ir.model.data,res_id:0
+#: field:ir.translation,res_id:0
+#: field:workflow.instance,res_id:0
+#: field:workflow.triggers,res_id:0
+msgid "Resource ID"
+msgstr ""
+
+#. module: base
+#: view:ir.cron:0
+#: field:ir.model,info:0
+msgid "Information"
+msgstr ""
+
+#. module: base
+#: view:res.widget.user:0
+msgid "User Widgets"
+msgstr ""
+
+#. module: base
+#: view:base.module.update:0
+msgid "Update Module List"
+msgstr ""
+
+#. module: base
+#: selection:res.partner.address,type:0
+msgid "Other"
+msgstr ""
+
+#. module: base
+#: view:res.request:0
+msgid "Reply"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Turkish / Türkçe"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_workflow_activity_form
+#: model:ir.ui.menu,name:base.menu_workflow_activity
+#: view:workflow:0
+#: field:workflow,activities:0
+msgid "Activities"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,auto_refresh:0
+msgid "Auto-Refresh"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:62
+#, python-format
+msgid "The osv_memory field can only be compared with = and != operator."
+msgstr ""
+
+#. module: base
+#: selection:ir.ui.view,type:0
+msgid "Diagram"
+msgstr ""
+
+#. module: base
+#: help:multi_company.default,name:0
+msgid "Name it to easily find a record"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.grant_menu_access
+#: model:ir.ui.menu,name:base.menu_grant_menu_access
+msgid "Menu Items"
+msgstr ""
+
+#. module: base
+#: constraint:ir.rule:0
+msgid "Rules are not supported for osv_memory objects !"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_event_association
+#: model:ir.ui.menu,name:base.menu_event_main
+msgid "Events Organisation"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.ir_sequence_actions
+#: model:ir.ui.menu,name:base.menu_custom_action
+#: model:ir.ui.menu,name:base.menu_ir_sequence_actions
+#: model:ir.ui.menu,name:base.next_id_6
+#: view:workflow.activity:0
+msgid "Actions"
+msgstr ""
+
+#. module: base
+#: selection:res.request,priority:0
+msgid "High"
+msgstr ""
+
+#. module: base
+#: field:ir.exports.line,export_id:0
+msgid "Export"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.hr
+msgid "Croatia"
+msgstr ""
+
+#. module: base
+#: help:res.bank,bic:0
+msgid "Bank Identifier Code"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tm
+msgid "Turkmenistan"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_actions.py:597
+#: code:addons/base/ir/ir_actions.py:629
+#: code:addons/base/ir/ir_actions.py:713
+#: code:addons/base/ir/ir_actions.py:716
+#: code:addons/base/ir/ir_model.py:114
+#: code:addons/base/ir/ir_model.py:204
+#: code:addons/base/ir/ir_model.py:218
+#: code:addons/base/ir/ir_model.py:232
+#: code:addons/base/ir/ir_model.py:250
+#: code:addons/base/ir/ir_model.py:255
+#: code:addons/base/ir/ir_model.py:258
+#: code:addons/base/module/module.py:215
+#: code:addons/base/module/module.py:258
+#: code:addons/base/module/module.py:262
+#: code:addons/base/module/module.py:268
+#: code:addons/base/module/module.py:303
+#: code:addons/base/module/module.py:321
+#: code:addons/base/module/module.py:336
+#: code:addons/base/module/module.py:429
+#: code:addons/base/module/module.py:531
+#: code:addons/base/publisher_warranty/publisher_warranty.py:163
+#: code:addons/base/publisher_warranty/publisher_warranty.py:281
+#: code:addons/base/res/res_currency.py:100
+#: code:addons/base/res/res_user.py:57
+#: code:addons/base/res/res_user.py:66
+#: code:addons/custom.py:558
+#: code:addons/orm.py:3199
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.pm
+msgid "Saint Pierre and Miquelon"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.report.xml,header:0
+msgid "Add or not the coporate RML header"
+msgstr ""
+
+#. module: base
+#: help:workflow.transition,act_to:0
+msgid "The destination activity."
+msgstr ""
+
+#. module: base
+#: view:base.module.update:0
+#: view:base.update.translations:0
+msgid "Update"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.report.xml,name:base.ir_module_reference_print
+msgid "Technical guide"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tz
+msgid "Tanzania"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Danish / Dansk"
+msgstr ""
+
+#. module: base
+#: selection:ir.model.fields,select_level:0
+msgid "Advanced Search (deprecated)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.cx
+msgid "Christmas Island"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Other Actions Configuration"
+msgstr ""
+
+#. module: base
+#: view:res.config.installer:0
+msgid "Install Modules"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.res_partner_canal-act
+#: model:ir.model,name:base.model_res_partner_canal
+#: model:ir.ui.menu,name:base.menu_res_partner_canal-act
+#: view:res.partner.canal:0
+msgid "Channels"
+msgstr ""
+
+#. module: base
+#: view:ir.ui.view:0
+msgid "Extra Info"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.act_values_form_action
+#: model:ir.ui.menu,name:base.menu_values_form_action
+msgid "Client Events"
+msgstr ""
+
+#. module: base
+#: view:ir.module.module:0
+msgid "Schedule for Installation"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_partner_wizard_ean_check
+msgid "Ean Check"
+msgstr ""
+
+#. module: base
+#: sql_constraint:res.config.users:0
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_multi_company_default
+msgid "Default multi company"
+msgstr ""
+
+#. module: base
+#: view:res.request:0
+msgid "Send"
+msgstr ""
+
+#. module: base
+#: field:res.config.users,menu_tips:0
+#: field:res.users,menu_tips:0
+msgid "Menu Tips"
+msgstr ""
+
+#. module: base
+#: field:ir.translation,src:0
+msgid "Source"
+msgstr ""
+
+#. module: base
+#: help:res.partner.address,partner_id:0
+msgid "Keep empty for a private address, not related to partner."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.vu
+msgid "Vanuatu"
+msgstr ""
+
+#. module: base
+#: view:res.company:0
+msgid "Internal Header/Footer"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_export_language.py:59
+#, python-format
+msgid ""
+"Save this document to a .tgz file. This archive containt UTF-8 %s files and "
+"may be uploaded to launchpad."
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "Start configuration"
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid "_Export"
+msgstr ""
+
+#. module: base
+#: field:base.language.install,state:0
+#: field:base.module.import,state:0
+#: field:base.module.update,state:0
+msgid "state"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Catalan / Català"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.do
+msgid "Dominican Republic"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Serbian (Cyrillic) / српски"
+msgstr ""
+
+#. module: base
+#: code:addons/orm.py:2161
+#, python-format
+msgid ""
+"Invalid group_by specification: \"%s\".\n"
+"A group_by specification must be a list of valid fields."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sa
+msgid "Saudi Arabia"
+msgstr ""
+
+#. module: base
+#: help:res.partner,supplier:0
+msgid ""
+"Check this box if the partner is a supplier. If it's not checked, purchase "
+"people will not see it when encoding a purchase order."
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,relation_field:0
+msgid "Relation Field"
+msgstr ""
+
+#. module: base
+#: view:res.partner.event:0
+msgid "Event Logs"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_module_configuration.py:37
+#, python-format
+msgid "System Configuration done"
+msgstr ""
+
+#. module: base
+#: field:workflow.triggers,instance_id:0
+msgid "Destination Instance"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,multi:0
+#: field:ir.actions.wizard,multi:0
+msgid "Action on Multiple Doc."
+msgstr ""
+
+#. module: base
+#: view:base.language.export:0
+msgid "https://translations.launchpad.net/openobject"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,report_xml:0
+msgid "XML path"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.todo,restart:0
+msgid "On Skip"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gn
+msgid "Guinea"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.lu
+msgid "Luxembourg"
+msgstr ""
+
+#. module: base
+#: help:ir.values,key2:0
+msgid ""
+"The kind of action or button in the client side that will trigger the action."
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_ui_menu.py:285
+#, python-format
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_publisher_warranty_contract_add_wizard
+#: model:ir.ui.menu,name:base.menu_publisher_warranty_contract_add
+#: view:publisher_warranty.contract.wizard:0
+msgid "Register a Contract"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid ""
+"3. If user belongs to several groups, the results from step 2 are combined "
+"with logical OR operator"
+msgstr ""
+
+#. module: base
+#: code:addons/base/publisher_warranty/publisher_warranty.py:145
+#, python-format
+msgid "Please check your publisher warranty contract name and validity."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sv
+msgid "El Salvador"
+msgstr ""
+
+#. module: base
+#: field:res.bank,phone:0
+#: field:res.partner,phone:0
+#: field:res.partner.address,phone:0
+msgid "Phone"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,active:0
+#: field:ir.sequence,active:0
+#: field:res.bank,active:0
+#: field:res.config.users,active:0
+#: field:res.currency,active:0
+#: field:res.lang,active:0
+#: field:res.partner,active:0
+#: field:res.partner.address,active:0
+#: field:res.partner.canal,active:0
+#: field:res.partner.category,active:0
+#: field:res.request,active:0
+#: field:res.users,active:0
+#: view:workflow.instance:0
+#: view:workflow.workitem:0
+msgid "Active"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.th
+msgid "Thailand"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_crm_config_lead
+msgid "Leads & Opportunities"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Romanian / română"
+msgstr ""
+
+#. module: base
+#: view:res.log:0
+msgid "System Logs"
+msgstr ""
+
+#. module: base
+#: selection:workflow.activity,join_mode:0
+#: selection:workflow.activity,split_mode:0
+msgid "And"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,relation:0
+msgid "Object Relation"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+#: view:res.partner:0
+msgid "General"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.uz
+msgid "Uzbekistan"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_act_window
+#: selection:ir.ui.menu,action:0
+msgid "ir.actions.act_window"
+msgstr ""
+
+#. module: base
+#: field:ir.rule,perm_create:0
+msgid "Apply For Create"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.vi
+msgid "Virgin Islands (USA)"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tw
+msgid "Taiwan"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_currency_rate
+msgid "Currency Rate"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.grant_menu_access
+msgid ""
+"Manage and customize the items available and displayed in your OpenERP "
+"system menu. You can delete an item by clicking on the box at the beginning "
+"of each line and then delete it through the button that appeared. Items can "
+"be assigned to specific groups in order to make them accessible to some "
+"users within the system."
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view,field_parent:0
+msgid "Child Field"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,usage:0
+#: field:ir.actions.act_window_close,usage:0
+#: field:ir.actions.actions,usage:0
+#: field:ir.actions.report.xml,usage:0
+#: field:ir.actions.server,usage:0
+#: field:ir.actions.wizard,usage:0
+msgid "Action Usage"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_workflow_workitem
+msgid "workflow.workitem"
+msgstr ""
+
+#. module: base
+#: selection:ir.module.module,state:0
+msgid "Not Installable"
+msgstr ""
+
+#. module: base
+#: report:ir.module.reference.graph:0
+msgid "View :"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,view_load:0
+msgid "View Auto-Load"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:232
+#, python-format
+msgid "You cannot remove the field '%s' !"
+msgstr ""
+
+#. module: base
+#: field:ir.exports,resource:0
+#: view:ir.property:0
+#: field:ir.property,res_id:0
+msgid "Resource"
+msgstr ""
+
+#. module: base
+#: field:ir.ui.menu,web_icon:0
+msgid "Web Icon File"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Persian / فارس"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+msgid "View Ordering"
+msgstr ""
+
+#. module: base
+#: code:addons/base/module/wizard/base_module_upgrade.py:95
+#, python-format
+msgid "Unmet dependency !"
+msgstr ""
+
+#. module: base
+#: view:base.language.import:0
+msgid ""
+"Supported file formats: *.csv (Comma-separated values) or *.po (GetText "
+"Portable Objects)"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:487
+#, python-format
+msgid ""
+"You can not delete this document (%s) ! Be sure your user belongs to one of "
+"these groups: %s."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_base_module_configuration
+msgid "base.module.configuration"
+msgstr ""
+
+#. module: base
+#: field:base.language.export,name:0
+#: field:ir.attachment,datas_fname:0
+msgid "Filename"
+msgstr ""
+
+#. module: base
+#: field:ir.model,access_ids:0
+#: view:ir.model.access:0
+msgid "Access"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sk
+msgid "Slovak Republic"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.publisher_warranty
+msgid "Publisher Warranty"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.aw
+msgid "Aruba"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ar
+msgid "Argentina"
+msgstr ""
+
+#. module: base
+#: field:res.groups,name:0
+msgid "Group Name"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.bh
+msgid "Bahrain"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_12
+msgid "Segmentation"
+msgstr ""
+
+#. module: base
+#: view:ir.attachment:0
+#: field:ir.attachment,company_id:0
+#: field:ir.default,company_id:0
+#: field:ir.property,company_id:0
+#: field:ir.sequence,company_id:0
+#: field:ir.values,company_id:0
+#: view:res.company:0
+#: field:res.config.users,company_id:0
+#: field:res.currency,company_id:0
+#: field:res.partner,company_id:0
+#: field:res.partner.address,company_id:0
+#: view:res.users:0
+#: field:res.users,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: base
+#: view:res.users:0
+msgid "Email & Signature"
+msgstr ""
+
+#. module: base
+#: view:publisher_warranty.contract:0
+msgid "Publisher Warranty Contract"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Bulgarian / български език"
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_aftersale
+msgid "After-Sale Services"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.todo:0
+msgid "Launch"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.act_window,limit:0
+msgid "Limit"
+msgstr ""
+
+#. module: base
+#: help:ir.actions.server,wkf_model_id:0
+msgid "Workflow to be executed on this model."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.jm
+msgid "Jamaica"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_partner_category_form
+msgid ""
+"Manage the partner categories in order to better classify them for tracking "
+"and analysis purposes. A partner may belong to several categories and "
+"categories have a hierarchy structure: a partner belonging to a category "
+"also belong to his parent category."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.az
+msgid "Azerbaijan"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/partner/partner.py:250
+#, python-format
+msgid "Warning"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Arabic / الْعَرَبيّة"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.vg
+msgid "Virgin Islands (British)"
+msgstr ""
+
+#. module: base
+#: view:ir.property:0
+#: model:ir.ui.menu,name:base.next_id_15
+msgid "Parameters"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Czech / Čeština"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Trigger Configuration"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,help:base.action_partner_supplier_form
+msgid ""
+"You can access all information regarding your suppliers from the supplier "
+"form: accounting data, history of emails, meetings, purchases, etc. You can "
+"uncheck the 'Suppliers' filter button in order to search in all your "
+"partners, including customers and prospects."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.rw
+msgid "Rwanda"
+msgstr ""
+
+#. module: base
+#: view:ir.sequence:0
+msgid "Day of the week (0:Monday): %(weekday)s"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.ck
+msgid "Cook Islands"
+msgstr ""
+
+#. module: base
+#: field:ir.model.data,noupdate:0
+msgid "Non Updatable"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Klingon"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sg
+msgid "Singapore"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.act_window,target:0
+msgid "Current Window"
+msgstr ""
+
+#. module: base
+#: view:ir.values:0
+msgid "Action Source"
+msgstr ""
+
+#. module: base
+#: view:res.config.view:0
+msgid ""
+"If you use OpenERP for the first time we strongly advise you to select the "
+"simplified interface, which has less features but is easier. You can always "
+"switch later from the user preferences."
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_country
+#: field:res.bank,country:0
+#: view:res.country:0
+#: field:res.country.state,country_id:0
+#: field:res.partner,country:0
+#: view:res.partner.address:0
+#: field:res.partner.address,country_id:0
+#: field:res.partner.bank,country_id:0
+msgid "Country"
+msgstr ""
+
+#. module: base
+#: field:ir.model.fields,complete_name:0
+#: field:ir.ui.menu,complete_name:0
+msgid "Complete Name"
+msgstr ""
+
+#. module: base
+#: field:ir.values,object:0
+msgid "Is Object"
+msgstr ""
+
+#. module: base
+#: view:ir.rule:0
+msgid ""
+"1. Global rules are combined together with a logical AND operator, and with "
+"the result of the following steps"
+msgstr ""
+
+#. module: base
+#: field:res.partner.category,name:0
+msgid "Category Name"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_15
+msgid "IT sector"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.act_window:0
+msgid "Select Groups"
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%X - Appropriate time representation."
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Spanish (SV) / Español (SV)"
+msgstr ""
+
+#. module: base
+#: help:res.lang,grouping:0
+msgid ""
+"The Separator Format should be like [,n] where 0 < n :starting from Unit "
+"digit.-1 will end the separation. e.g. [3,2,-1] will represent 106500 to be "
+"1,06,500;[1,2,-1] will represent it to be 106,50,0;[3] will represent it as "
+"106,500. Provided ',' as the thousand separator in each case."
+msgstr ""
+
+#. module: base
+#: view:res.company:0
+msgid "Portrait"
+msgstr ""
+
+#. module: base
+#: code:addons/base/ir/ir_model.py:317
+#, python-format
+msgid "Can only rename one column at a time!"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Wizard Button"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Report/Template"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.act_window.view,view_mode:0
+#: selection:ir.ui.view,type:0
+#: selection:wizard.ir.model.menu.create.line,view_type:0
+msgid "Graph"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_ir_actions_server
+#: selection:ir.ui.menu,action:0
+msgid "ir.actions.server"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.configuration.wizard,progress:0
+#: field:res.config,progress:0
+#: field:res.config.installer,progress:0
+#: field:res.config.users,progress:0
+#: field:res.config.view,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form
+#: model:ir.ui.menu,name:base.menu_ir_actions_todo_form
+#: model:ir.ui.menu,name:base.next_id_11
+msgid "Configuration Wizards"
+msgstr ""
+
+#. module: base
+#: field:res.lang,code:0
+msgid "Locale Code"
+msgstr ""
+
+#. module: base
+#: field:workflow.activity,split_mode:0
+msgid "Split Mode"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "Note that this operation might take a few minutes."
+msgstr ""
+
+#. module: base
+#: model:ir.ui.menu,name:base.menu_localisation
+msgid "Localisation"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid "Action to Launch"
+msgstr ""
+
+#. module: base
+#: view:ir.cron:0
+msgid "Execution"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,condition:0
+#: field:workflow.transition,condition:0
+msgid "Condition"
+msgstr ""
+
+#. module: base
+#: help:ir.values,model_id:0
+msgid "This field is not used, it only helps you to select a good model."
+msgstr ""
+
+#. module: base
+#: field:ir.ui.view,name:0
+msgid "View Name"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Italian / Italiano"
+msgstr ""
+
+#. module: base
+#: field:ir.actions.report.xml,attachment:0
+msgid "Save As Attachment Prefix"
+msgstr ""
+
+#. module: base
+#: view:ir.actions.server:0
+msgid ""
+"Only one client action will be executed, last client action will be "
+"considered in case of multiple client actions."
+msgstr ""
+
+#. module: base
+#: view:res.lang:0
+msgid "%j - Day of the year [001,366]."
+msgstr ""
+
+#. module: base
+#: field:ir.actions.server,mobile:0
+msgid "Mobile No"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_partner_by_category
+#: model:ir.actions.act_window,name:base.action_partner_category_form
+#: model:ir.model,name:base.model_res_partner_category
+#: model:ir.ui.menu,name:base.menu_partner_category_form
+#: view:res.partner.category:0
+msgid "Partner Categories"
+msgstr ""
+
+#. module: base
+#: view:base.module.upgrade:0
+msgid "System Update"
+msgstr ""
+
+#. module: base
+#: selection:ir.translation,type:0
+msgid "Wizard Field"
+msgstr ""
+
+#. module: base
+#: help:ir.sequence,prefix:0
+msgid "Prefix value of the record for the sequence"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sc
+msgid "Seychelles"
+msgstr ""
+
+#. module: base
+#: model:ir.model,name:base.model_res_partner_bank
+#: view:res.partner.bank:0
+msgid "Bank Accounts"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.sl
+msgid "Sierra Leone"
+msgstr "塞拉里昂"
+
+#. module: base
+#: view:res.company:0
+#: view:res.partner:0
+msgid "General Information"
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.tc
+msgid "Turks and Caicos Islands"
+msgstr ""
+
+#. module: base
+#: field:res.partner.bank,owner_name:0
+msgid "Account Owner"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/res_user.py:256
+#, python-format
+msgid "Company Switch Warning"
+msgstr ""
+
+#. module: base
+#: model:ir.actions.act_window,name:base.action_res_widget_wizard
+msgid "Homepage Widgets Management"
+msgstr ""
+
+#. module: base
+#: field:workflow,osv:0
+#: field:workflow.instance,res_type:0
+msgid "Resource Object"
+msgstr ""
+
+#. module: base
+#: help:ir.sequence,number_increment:0
+msgid "The next number of the sequence will be incremented by this number"
+msgstr ""
+
+#. module: base
+#: field:ir.cron,function:0
+#: field:res.partner.address,function:0
+#: selection:workflow.activity,kind:0
+msgid "Function"
+msgstr ""
+
+#. module: base
+#: view:res.widget:0
+msgid "Search Widget"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.todo,restart:0
+msgid "Never"
+msgstr ""
+
+#. module: base
+#: selection:res.partner.address,type:0
+msgid "Delivery"
+msgstr ""
+
+#. module: base
+#: model:res.partner.title,name:base.res_partner_title_pvt_ltd
+#: model:res.partner.title,shortcut:base.res_partner_title_pvt_ltd
+msgid "Corp."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.gw
+msgid "Guinea Bissau"
+msgstr ""
+
+#. module: base
+#: view:workflow.instance:0
+msgid "Workflow Instances"
+msgstr ""
+
+#. module: base
+#: code:addons/base/res/partner/partner.py:261
+#, python-format
+msgid "Partners: "
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.kp
+msgid "North Korea"
+msgstr ""
+
+#. module: base
+#: selection:ir.actions.server,state:0
+msgid "Create Object"
+msgstr ""
+
+#. module: base
+#: view:ir.filters:0
+#: field:res.log,context:0
+msgid "Context"
+msgstr ""
+
+#. module: base
+#: field:res.bank,bic:0
+msgid "BIC/Swift code"
+msgstr ""
+
+#. module: base
+#: model:res.partner.category,name:base.res_partner_category_1
+msgid "Prospect"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Polish / Język polski"
+msgstr ""
+
+#. module: base
+#: field:ir.exports,name:0
+msgid "Export Name"
+msgstr ""
+
+#. module: base
+#: help:res.partner.address,type:0
+msgid ""
+"Used to select automatically the right address according to the context in "
+"sales and purchases documents."
+msgstr ""
+
+#. module: base
+#: model:res.country,name:base.lk
+msgid "Sri Lanka"
+msgstr ""
+
+#. module: base
+#: selection:base.language.install,lang:0
+msgid "Russian / русский язык"
+msgstr ""
diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po
index 76f346231dc..53610346f81 100644
--- a/openerp/addons/base/i18n/zh_TW.po
+++ b/openerp/addons/base/i18n/zh_TW.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-01-28 02:14+0000\n"
+"PO-Revision-Date: 2011-09-27 16:28+0000\n"
"Last-Translator: Walter Cheuk \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-09-01 04:45+0000\n"
-"X-Generator: Launchpad (build 13827)\n"
+"X-Launchpad-Export-Date: 2011-09-28 05:19+0000\n"
+"X-Generator: Launchpad (build 14049)\n"
#. module: base
#: view:ir.filters:0
@@ -46,7 +46,7 @@ msgstr "日期時間"
msgid ""
"The second argument of the many2many field %s must be a SQL table !You used "
"%s, which is not a valid SQL table name."
-msgstr "many2many 欄位 %s 之第二個引數須為 SQL 表格!您用了並非有效 SQL 表格名稱之 %s。"
+msgstr "「多對多(many2many)」欄位 %s 之第二個引數須為 SQL 表格!您用了並非有效 SQL 表格名稱之 %s。"
#. module: base
#: view:ir.values:0
@@ -103,7 +103,7 @@ msgstr "工作流程作用於"
#. module: base
#: field:ir.actions.act_window,display_menu_tip:0
msgid "Display Menu Tips"
-msgstr "顯示選表提示"
+msgstr "顯示選單提示"
#. module: base
#: view:ir.module.module:0
@@ -129,7 +129,7 @@ msgstr ""
#. module: base
#: field:res.partner,ref:0
msgid "Reference"
-msgstr "參照"
+msgstr "參考"
#. module: base
#: field:ir.actions.act_window,target:0
@@ -154,7 +154,7 @@ msgstr ""
#: code:addons/osv.py:133
#, python-format
msgid "Constraint Error"
-msgstr ""
+msgstr "約束錯誤"
#. module: base
#: model:ir.model,name:base.model_ir_ui_view_custom
@@ -171,12 +171,12 @@ msgstr "史瓦濟蘭"
#: code:addons/orm.py:3653
#, python-format
msgid "created."
-msgstr ""
+msgstr "已建立。"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_woodsuppliers0
msgid "Wood Suppliers"
-msgstr ""
+msgstr "木材供應商"
#. module: base
#: code:addons/base/module/module.py:303
@@ -224,7 +224,7 @@ msgstr "新"
#. module: base
#: field:ir.actions.report.xml,multi:0
msgid "On multiple doc."
-msgstr "作用於多重檔案。"
+msgstr "作用於多重文件。"
#. module: base
#: field:ir.module.category,module_nr:0
@@ -252,12 +252,12 @@ msgstr "聯絡人名稱"
msgid ""
"Save this document to a %s file and edit it with a specific software or a "
"text editor. The file encoding is UTF-8."
-msgstr "將此檔案儲存為%s檔案後可以特定軟體或文字編輯程式修改。檔案編碼為 UTF-8。"
+msgstr "將此檔案存為 %s 檔案,並以特定軟體或文字編輯程式修改。檔案編碼為 UTF-8。"
#. module: base
#: sql_constraint:res.lang:0
msgid "The name of the language must be unique !"
-msgstr ""
+msgstr "語言名稱須與其他不同 !"
#. module: base
#: selection:res.request,state:0
@@ -329,7 +329,7 @@ msgstr "欄位名稱"
#: wizard_view:server.action.create,init:0
#: wizard_field:server.action.create,init,type:0
msgid "Select Action Type"
-msgstr "選擇動作類型"
+msgstr "選取動作類型"
#. module: base
#: model:res.country,name:base.tv
@@ -422,7 +422,7 @@ msgstr "哥倫比亞"
#. module: base
#: view:ir.module.module:0
msgid "Schedule Upgrade"
-msgstr "排程升級"
+msgstr "安排升級"
#. module: base
#: code:addons/orm.py:838
@@ -436,7 +436,7 @@ msgid ""
"The ISO country code in two chars.\n"
"You can use this field for quick search."
msgstr ""
-"ISO 國家代碼使用兩個字符。\n"
+"ISO 國家代碼使用兩個字元。\n"
"您可以使用該欄位來快速搜索。"
#. module: base
@@ -447,7 +447,7 @@ msgstr "帛琉"
#. module: base
#: view:res.partner:0
msgid "Sales & Purchases"
-msgstr "銷售&採購"
+msgstr "銷售 及 購貨"
#. module: base
#: view:ir.translation:0
@@ -481,7 +481,7 @@ msgstr "自訂欄位名稱開頭必須是 'x_' !"
#. module: base
#: help:ir.actions.server,action_id:0
msgid "Select the Action Window, Report, Wizard to be executed."
-msgstr "選擇要執行的動作視窗、報表或精靈。"
+msgstr "選取要執行之動作視窗、報表或精靈。"
#. module: base
#: view:res.config.users:0
@@ -502,7 +502,7 @@ msgstr "模型說明"
#: help:ir.actions.act_window,src_model:0
msgid ""
"Optional model name of the objects on which this action should be visible"
-msgstr ""
+msgstr "要可見動作的物件之模型名稱(可有可無)"
#. module: base
#: field:workflow.transition,trigger_expr_id:0
@@ -548,7 +548,7 @@ msgstr "是否檢查 Ean? "
#. module: base
#: field:ir.values,key2:0
msgid "Event Type"
-msgstr "事件類型"
+msgstr "活動類型"
#. module: base
#: view:base.language.export:0
@@ -684,7 +684,7 @@ msgstr "西班牙文 (UY) / Español (UY)"
#: field:res.partner,mobile:0
#: field:res.partner.address,mobile:0
msgid "Mobile"
-msgstr "手機"
+msgstr "手提電話"
#. module: base
#: model:res.country,name:base.om
@@ -741,7 +741,7 @@ msgstr "印度"
#: model:ir.actions.act_window,name:base.res_request_link-act
#: model:ir.ui.menu,name:base.menu_res_request_link_act
msgid "Request Reference Types"
-msgstr "請求參照類型"
+msgstr "請求參考類型"
#. module: base
#: view:ir.values:0
@@ -812,7 +812,7 @@ msgstr "人力資源儀錶板"
#: code:addons/base/res/res_user.py:507
#, python-format
msgid "Setting empty passwords is not allowed for security reasons!"
-msgstr "因保安理由密碼不能留空!"
+msgstr "因安全理由密碼不能留空!"
#. module: base
#: selection:ir.actions.server,state:0
@@ -882,7 +882,7 @@ msgstr "刪除存取"
#. module: base
#: model:res.country,name:base.ne
msgid "Niger"
-msgstr "尼日爾"
+msgstr "尼日"
#. module: base
#: selection:base.language.install,lang:0
@@ -998,7 +998,7 @@ msgstr "儀錶板"
#. module: base
#: model:ir.ui.menu,name:base.menu_purchase_root
msgid "Purchases"
-msgstr "採購"
+msgstr "購貨"
#. module: base
#: model:res.country,name:base.md
@@ -1120,7 +1120,7 @@ msgstr "報表"
msgid ""
"If set to true, the action will not be displayed on the right toolbar of a "
"form view."
-msgstr "如設為是,該動作不會顯示於表單檢視右側工具欄。"
+msgstr "如設為真,該動作不會顯示於表單檢視右側工具欄。"
#. module: base
#: field:workflow,on_create:0
@@ -1239,7 +1239,7 @@ msgstr "馬爾地夫"
#. module: base
#: help:ir.values,res_id:0
msgid "Keep 0 if the action must appear on all resources."
-msgstr "如果該動作要顯示於所有資源上的話請保持為「0」。"
+msgstr "如該動作要顯示於所有資源的話請保持為「0」。"
#. module: base
#: model:ir.model,name:base.model_ir_rule
@@ -1325,7 +1325,7 @@ msgstr "優先次序"
#. module: base
#: field:workflow.transition,act_from:0
msgid "Source Activity"
-msgstr "來源活動"
+msgstr "來源地動態"
#. module: base
#: view:ir.sequence:0
@@ -1368,7 +1368,7 @@ msgstr "完整路徑"
#. module: base
#: view:res.request:0
msgid "References"
-msgstr "參照"
+msgstr "參考"
#. module: base
#: view:res.lang:0
@@ -1510,7 +1510,7 @@ msgstr ""
#. module: base
#: view:workflow.activity:0
msgid "Workflow Activity"
-msgstr "工作流程活動"
+msgstr "工作流程動態"
#. module: base
#: view:ir.rule:0
@@ -1694,7 +1694,7 @@ msgstr "原始檢視"
#. module: base
#: view:ir.values:0
msgid "Action To Launch"
-msgstr "要啟動之動作"
+msgstr "要執行之動作"
#. module: base
#: field:ir.actions.url,target:0
@@ -1736,7 +1736,7 @@ msgstr ""
#. module: base
#: help:ir.values,action_id:0
msgid "This field is not used, it only helps you to select the right action."
-msgstr "該欄位並未使用,只是為了幫您選擇正確的動作。"
+msgstr "此欄位並未使用,只是為了幫您選擇正確動作。"
#. module: base
#: field:ir.actions.server,email:0
@@ -1916,7 +1916,7 @@ msgstr "諾福克島"
#. module: base
#: selection:base.language.install,lang:0
msgid "Korean (KR) / 한국어 (KR)"
-msgstr "韓文 (KR) / 한국어 (KR)"
+msgstr "韓文 (北韓) / 한국어 (KR)"
#. module: base
#: help:ir.model.fields,model:0
@@ -1927,7 +1927,7 @@ msgstr ""
#: field:ir.actions.server,action_id:0
#: selection:ir.actions.server,state:0
msgid "Client Action"
-msgstr "客戶端動作"
+msgstr "用戶端動作"
#. module: base
#: model:res.country,name:base.bd
@@ -2007,7 +2007,7 @@ msgstr "屬性"
#: model:ir.model,name:base.model_res_partner_bank_type
#: view:res.partner.bank.type:0
msgid "Bank Account Type"
-msgstr "銀行帳戶類型"
+msgstr "銀行帳號類型"
#. module: base
#: field:base.language.export,config_logo:0
@@ -2171,7 +2171,7 @@ msgstr "西班牙文 (DO) / Español (DO)"
#. module: base
#: model:ir.model,name:base.model_workflow_activity
msgid "workflow.activity"
-msgstr "工作流程.活動"
+msgstr "工作流程.動態"
#. module: base
#: help:ir.ui.view_sc,res_id:0
@@ -2239,7 +2239,7 @@ msgstr ""
#. module: base
#: field:ir.default,ref_id:0
msgid "ID Ref."
-msgstr "ID參照"
+msgstr "ID參考"
#. module: base
#: model:ir.actions.server,name:base.action_start_configurator
@@ -2313,7 +2313,7 @@ msgstr "分格格式"
#. module: base
#: selection:publisher_warranty.contract,state:0
msgid "Unvalidated"
-msgstr "未檢驗"
+msgstr "未驗證"
#. module: base
#: model:ir.ui.menu,name:base.next_id_9
@@ -2336,7 +2336,7 @@ msgstr "馬約特"
#: code:addons/base/ir/ir_actions.py:597
#, python-format
msgid "Please specify an action to launch !"
-msgstr "請指定執行動作!"
+msgstr "請指定要執行之動作!"
#. module: base
#: view:res.payterm:0
@@ -2368,7 +2368,7 @@ msgstr "請檢查所有行數皆有%d個欄位。"
#: view:ir.cron:0
#: model:ir.ui.menu,name:base.menu_ir_cron_act
msgid "Scheduled Actions"
-msgstr "計劃的動作"
+msgstr "已安排動作"
#. module: base
#: field:res.partner.address,title:0
@@ -2412,7 +2412,7 @@ msgstr "建立選單"
msgid ""
"Value Added Tax number. Check the box if the partner is subjected to the "
"VAT. Used by the VAT legal statement."
-msgstr "增值稅編號。如該伙伴適用於增值稅,請選擇。用於增值稅申報。"
+msgstr "增值稅編號。如該伙伴需要繳交增值稅,請選擇。用於申報增值稅。"
#. module: base
#: model:ir.model,name:base.model_maintenance_contract
@@ -2710,7 +2710,7 @@ msgstr "基礎欄位"
#. module: base
#: view:publisher_warranty.contract:0
msgid "Validate"
-msgstr "檢驗"
+msgstr "驗證"
#. module: base
#: field:ir.actions.todo,restart:0
@@ -2810,7 +2810,7 @@ msgstr ""
#. module: base
#: model:res.partner.category,name:base.res_partner_category_16
msgid "Telecom sector"
-msgstr "電訊範疇"
+msgstr "電信範疇"
#. module: base
#: field:workflow.transition,trigger_model:0
@@ -2820,7 +2820,7 @@ msgstr "觸發器物件"
#. module: base
#: view:res.users:0
msgid "Current Activity"
-msgstr "目前活動"
+msgstr "當前動態"
#. module: base
#: view:workflow.activity:0
@@ -2842,7 +2842,7 @@ msgstr "行銷"
#: view:res.partner.bank:0
#: model:res.partner.bank.type,name:base.bank_normal
msgid "Bank account"
-msgstr "銀行帳戶"
+msgstr "銀行帳號"
#. module: base
#: selection:base.language.install,lang:0
@@ -2857,7 +2857,7 @@ msgstr "序列類型"
#. module: base
#: view:ir.ui.view.custom:0
msgid "Customized Architecture"
-msgstr "自訂架構"
+msgstr "自訂化架構"
#. module: base
#: field:ir.module.module,license:0
@@ -2877,7 +2877,7 @@ msgstr "必定"
#. module: base
#: selection:ir.translation,type:0
msgid "SQL Constraint"
-msgstr "SQL 限制"
+msgstr "SQL 約束"
#. module: base
#: field:ir.actions.server,srcmodel_id:0
@@ -3070,7 +3070,7 @@ msgstr "肯亞"
#. module: base
#: view:res.partner.event:0
msgid "Event"
-msgstr "事件"
+msgstr "活動"
#. module: base
#: model:ir.ui.menu,name:base.menu_custom_reports
@@ -3080,7 +3080,7 @@ msgstr "自訂報表"
#. module: base
#: selection:base.language.install,lang:0
msgid "Abkhazian / аҧсуа"
-msgstr "阿布哈茲文 / аҧсуа"
+msgstr "阿布哈兹文 / аҧсуа"
#. module: base
#: view:base.module.configuration:0
@@ -3106,7 +3106,7 @@ msgstr "聖馬利諾"
#. module: base
#: model:res.country,name:base.bm
msgid "Bermuda"
-msgstr "百慕達"
+msgstr "百慕大"
#. module: base
#: model:res.country,name:base.pe
@@ -3180,7 +3180,7 @@ msgstr "完整存取"
#: view:ir.model.fields:0
#: model:ir.ui.menu,name:base.menu_security
msgid "Security"
-msgstr "保安"
+msgstr "安全"
#. module: base
#: model:res.widget,title:base.openerp_favorites_twitter_widget
@@ -3481,8 +3481,8 @@ msgid ""
"plugin, don't forget to register emails to each contact so that the gateway "
"will automatically attach incoming emails to the right partner."
msgstr ""
-"客戶是指您與其做生意者,例如公司或機構。客戶可有多個聯絡人或地址,均屬於其員工。您可用「歷史」分頁追蹤所有有關交易:訂單、電郵、機會、退款要求等等。如您用"
-"電郵閘道和 Outlook 或 Thunderbird 外掛程式,別忘了為聯絡人登記電郵,好讓閘道自動為合適伙伴寄送收到之電郵。"
+"客戶是指您與其做生意者,例如公司或機構。客戶可有多個聯絡人或地址,均屬於其員工。您可用「歷史」分頁追蹤所有有關交易:訂單、電郵、商機、退款要求等等。如您用"
+"電郵閘道、Outlook 或 Thunderbird 外掛程式,別忘了為聯絡人登記電郵,好讓閘道自動為合適伙伴寄送收到之電郵。"
#. module: base
#: field:ir.actions.report.xml,name:0
@@ -3517,7 +3517,7 @@ msgstr "名稱"
msgid ""
"If set to true, the action will not be displayed on the right toolbar of a "
"form view"
-msgstr "如設為是,該動作不會顯示於表單檢視右側工具欄"
+msgstr "如設為真,該動作不會顯示於表單檢視右側工具欄"
#. module: base
#: model:res.country,name:base.ms
@@ -3543,7 +3543,7 @@ msgstr "應用程式詞彙"
msgid ""
"The user's timezone, used to perform timezone conversions between the server "
"and the client."
-msgstr ""
+msgstr "用戶之時區,用以為伺服器及用戶端進行時區轉換。"
#. module: base
#: field:ir.module.module,demo:0
@@ -3565,7 +3565,7 @@ msgstr "日文 / 日本語"
msgid ""
"Source activity. When this activity is over, the condition is tested to "
"determine if we can start the ACT_TO activity."
-msgstr ""
+msgstr "來源地動態。當再無動態,會測試條件以決定是否開始 ACT_TO 動態。"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_3
@@ -3618,7 +3618,7 @@ msgstr "冷岸及央麥恩群島"
#: model:ir.model,name:base.model_ir_actions_wizard
#: selection:ir.ui.menu,action:0
msgid "ir.actions.wizard"
-msgstr ""
+msgstr "ir.actions.wizard"
#. module: base
#: view:ir.actions.act_window:0
@@ -3753,12 +3753,12 @@ msgstr "無法載入模組基礎!(提示:檢查附加元件路徑)"
#. module: base
#: view:res.partner.bank:0
msgid "Bank Account Owner"
-msgstr "銀行帳戶所有者"
+msgstr "銀行帳號所有者"
#. module: base
#: model:ir.actions.act_window,name:base.act_values_form
msgid "Client Actions Connections"
-msgstr "客戶端動作連接"
+msgstr "用戶端動作連線"
#. module: base
#: field:ir.attachment,res_name:0
@@ -3836,7 +3836,7 @@ msgstr ""
#. module: base
#: view:ir.actions.server:0
msgid "Client Action Configuration"
-msgstr "客戶端動作設置"
+msgstr "用戶端動作設定"
#. module: base
#: model:ir.model,name:base.model_res_partner_address
@@ -3872,13 +3872,13 @@ msgstr "選取要匯入之模組套件 (.zip 檔):"
#: field:res.partner.event,name:0
#: model:res.widget,title:base.events_widget
msgid "Events"
-msgstr "事件"
+msgstr "活動"
#. module: base
#: model:ir.model,name:base.model_ir_actions_url
#: selection:ir.ui.menu,action:0
msgid "ir.actions.url"
-msgstr ""
+msgstr "ir.actions.url"
#. module: base
#: model:res.widget,title:base.currency_converter_widget
@@ -4098,7 +4098,7 @@ msgstr "重複錯過的"
#. module: base
#: help:ir.actions.server,state:0
msgid "Type of the Action that is to be executed"
-msgstr "將要執行動作之類型"
+msgstr "要執行動作之類型"
#. module: base
#: field:ir.server.object.lines,server_id:0
@@ -4706,7 +4706,7 @@ msgid ""
"Track from where is coming your leads and opportunities by creating specific "
"channels that will be maintained at the creation of a document in the "
"system. Some examples of channels can be: Website, Phone Call, Reseller, etc."
-msgstr ""
+msgstr "於系統建立文件,以保持特定渠道追蹤潛在客戶及商機之來源。渠道例子有網站、電話查詢、零售商等等。"
#. module: base
#: model:res.partner.bank.type.field,name:base.bank_normal_field
@@ -4765,7 +4765,7 @@ msgstr "變改我的偏好設定"
#: code:addons/base/ir/ir_actions.py:164
#, python-format
msgid "Invalid model name in the action definition."
-msgstr "動作定義之模型名無效。"
+msgstr "動作定義之模型名稱無效。"
#. module: base
#: field:partner.sms.send,text:0
@@ -4900,7 +4900,7 @@ msgstr "如指定,此動作會於此用戶登入時於標準選單以外額外
#. module: base
#: view:ir.values:0
msgid "Client Actions"
-msgstr "客戶端動作"
+msgstr "用戶端動作"
#. module: base
#: code:addons/orm.py:1806
@@ -4921,12 +4921,12 @@ msgstr ""
#. module: base
#: field:workflow.transition,act_to:0
msgid "Destination Activity"
-msgstr "目的地活動"
+msgstr "目的地動態"
#. module: base
#: view:ir.values:0
msgid "Connect Events to Actions"
-msgstr "把事件連接動作"
+msgstr "把活動關聯到動作"
#. module: base
#: model:ir.model,name:base.model_base_update_translations
@@ -5041,7 +5041,7 @@ msgstr "網頁圖示影像"
#. module: base
#: view:ir.values:0
msgid "Values for Event Type"
-msgstr "事件類型值"
+msgstr "活動類型值"
#. module: base
#: selection:ir.model.fields,select_level:0
@@ -5069,6 +5069,8 @@ msgid ""
"installed the CRM, with the history tab, you can track all the interactions "
"with a partner such as opportunities, emails, or sales orders issued."
msgstr ""
+"客戶(於系統其他地方又稱「伙伴」)助您管理其他公司,包括潛在客戶、客戶及/或供應商,之通訊錄。「伙伴表單」讓您追蹤及紀錄所有所需資訊,以讓您處理公司地址、"
+"聯絡人、報價單等等。如您安裝了客戶關係管理(CRM)模組,以歷史分頁您可追蹤與伙伴有關之所有來往,如商機、電郵或銷售訂單等。"
#. module: base
#: model:res.country,name:base.ph
@@ -5552,7 +5554,7 @@ msgstr ""
#: code:addons/base/res/res_config.py:94
#, python-format
msgid "Couldn't find previous ir.actions.todo"
-msgstr ""
+msgstr "找不到之前的 ir.actions.todo"
#. module: base
#: view:ir.actions.act_window:0
@@ -5792,7 +5794,7 @@ msgstr "宏都拉斯"
#: help:res.users,menu_tips:0
msgid ""
"Check out this box if you want to always display tips on each menu action"
-msgstr ""
+msgstr "如想於每個選單動作顯示提示,勾選此框"
#. module: base
#: model:res.country,name:base.eg
@@ -6078,7 +6080,7 @@ msgstr "建立日期"
msgid ""
"Select the action that will be executed. Loop action will not be avaliable "
"inside loop."
-msgstr "選擇將要執行的動作。循環動作在循環內不可用。"
+msgstr "選取要執行之動作。循環動作在循環內不可用。"
#. module: base
#: selection:base.language.install,lang:0
@@ -6358,7 +6360,7 @@ msgstr "模組更新結果"
#: view:workflow.activity:0
#: field:workflow.workitem,act_id:0
msgid "Activity"
-msgstr "活動"
+msgstr "動態"
#. module: base
#: view:res.partner:0
@@ -6423,7 +6425,7 @@ msgstr ""
msgid ""
"Customized views are used when users reorganize the content of their "
"dashboard views (via web client)"
-msgstr ""
+msgstr "當用戶(以 web client)重組其 dashboard 檢視即會使用自訂化檢視"
#. module: base
#: field:ir.model,name:0
@@ -6494,7 +6496,7 @@ msgstr ""
#: model:ir.actions.act_window,name:base.res_log_act_window
#: model:ir.ui.menu,name:base.menu_res_log_act_window
msgid "Client Logs"
-msgstr "客戶端日誌"
+msgstr "用戶端日誌"
#. module: base
#: model:res.country,name:base.al
@@ -6534,7 +6536,7 @@ msgstr ""
#: code:addons/base/ir/ir_actions.py:716
#, python-format
msgid "Problem in configuration `Record Id` in Server Action!"
-msgstr "於伺服器動作之「Record Id」配置錯誤!"
+msgstr "伺服器動作之「紀錄 Id」配置有問題!"
#. module: base
#: code:addons/orm.py:2306
@@ -6587,7 +6589,7 @@ msgstr "電郵"
#: field:res.config.users,action_id:0
#: field:res.users,action_id:0
msgid "Home Action"
-msgstr "家動作(Home Action)"
+msgstr "家動作(Home Action)"
#. module: base
#: code:addons/custom.py:558
@@ -7603,7 +7605,7 @@ msgstr "要更新模組"
msgid ""
"Important when you deal with multiple actions, the execution order will be "
"decided based on this, low number is higher priority."
-msgstr "對於處理多個動作很重要,其決定動作執行順序;小的數字具較高優先次序。"
+msgstr "對於處理多重動作很重要,其決定動作執行次序;小的數字具較高優先次序。"
#. module: base
#: field:ir.actions.report.xml,header:0
@@ -7756,7 +7758,7 @@ msgstr "格陵蘭"
#. module: base
#: field:res.partner.bank,acc_number:0
msgid "Account Number"
-msgstr "帳戶號碼"
+msgstr "帳號"
#. module: base
#: view:res.lang:0
@@ -7969,7 +7971,7 @@ msgstr "斯洛伐克文 / Slovenský jazyk"
#: field:ir.ui.menu,icon_pict:0
#: field:publisher_warranty.contract.wizard,state:0
msgid "unknown"
-msgstr "不明"
+msgstr "不詳"
#. module: base
#: field:res.currency,symbol:0
@@ -8032,7 +8034,7 @@ msgstr "CSV 檔"
#. module: base
#: field:res.company,account_no:0
msgid "Account No."
-msgstr "帳戶號碼"
+msgstr "帳號"
#. module: base
#: code:addons/base/res/res_lang.py:157
@@ -8128,7 +8130,7 @@ msgstr "土耳其文 / Türkçe"
#: view:workflow:0
#: field:workflow,activities:0
msgid "Activities"
-msgstr "活動"
+msgstr "動態"
#. module: base
#: field:ir.actions.act_window,auto_refresh:0
@@ -8166,7 +8168,7 @@ msgstr ""
#: model:ir.ui.menu,name:base.menu_event_association
#: model:ir.ui.menu,name:base.menu_event_main
msgid "Events Organisation"
-msgstr "事件組織"
+msgstr "活動組織"
#. module: base
#: model:ir.actions.act_window,name:base.ir_sequence_actions
@@ -8247,7 +8249,7 @@ msgstr "添加公司 RML 頁首與否"
#. module: base
#: help:workflow.transition,act_to:0
msgid "The destination activity."
-msgstr "目的地活地。"
+msgstr "目的地動態。"
#. module: base
#: view:base.module.update:0
@@ -8283,7 +8285,7 @@ msgstr "聖誕島"
#. module: base
#: view:ir.actions.server:0
msgid "Other Actions Configuration"
-msgstr "其他動作設置"
+msgstr "其他動作配置"
#. module: base
#: view:res.config.installer:0
@@ -8307,7 +8309,7 @@ msgstr "額外資訊"
#: model:ir.actions.act_window,name:base.act_values_form_action
#: model:ir.ui.menu,name:base.menu_values_form_action
msgid "Client Events"
-msgstr "客戶端事件"
+msgstr "用戶端活動"
#. module: base
#: view:ir.module.module:0
@@ -8429,7 +8431,7 @@ msgstr "關聯欄位"
#. module: base
#: view:res.partner.event:0
msgid "Event Logs"
-msgstr "事件日誌"
+msgstr "活動日誌"
#. module: base
#: code:addons/base/module/wizard/base_module_configuration.py:37
@@ -8446,7 +8448,7 @@ msgstr "目的地實例"
#: field:ir.actions.act_window,multi:0
#: field:ir.actions.wizard,multi:0
msgid "Action on Multiple Doc."
-msgstr "動作作用於多個文件"
+msgstr "多重文件之動作。"
#. module: base
#: view:base.language.export:0
@@ -8477,7 +8479,7 @@ msgstr "盧森堡"
#: help:ir.values,key2:0
msgid ""
"The kind of action or button in the client side that will trigger the action."
-msgstr "客戶端的該類動作或按鈕將觸發此動作。"
+msgstr "用戶端的該類動作或按鈕會觸發此動作。"
#. module: base
#: code:addons/base/ir/ir_ui_menu.py:285
@@ -8899,7 +8901,7 @@ msgstr "目前視窗"
#. module: base
#: view:ir.values:0
msgid "Action Source"
-msgstr "動作來源"
+msgstr "動作來源地"
#. module: base
#: view:res.config.view:0
@@ -9048,7 +9050,7 @@ msgstr "本地化"
#. module: base
#: view:ir.actions.server:0
msgid "Action to Launch"
-msgstr "要啟動動作"
+msgstr "要執行之動作"
#. module: base
#: view:ir.cron:0
@@ -9086,7 +9088,7 @@ msgstr "另存為附件前綴"
msgid ""
"Only one client action will be executed, last client action will be "
"considered in case of multiple client actions."
-msgstr "只能執行一個客戶端動作,如有多重動作只考慮最後一個。"
+msgstr "只會執行一個用戶端動作,如有多重用戶端動作只考慮最後一個。"
#. module: base
#: view:res.lang:0
@@ -9131,7 +9133,7 @@ msgstr "塞席爾"
#: model:ir.model,name:base.model_res_partner_bank
#: view:res.partner.bank:0
msgid "Bank Accounts"
-msgstr "銀行帳戶"
+msgstr "銀行帳號"
#. module: base
#: model:res.country,name:base.sl
@@ -9152,7 +9154,7 @@ msgstr "土克斯及開科斯群島"
#. module: base
#: field:res.partner.bank,owner_name:0
msgid "Account Owner"
-msgstr "帳戶所有者"
+msgstr "帳號所有者"
#. module: base
#: code:addons/base/res/res_user.py:256
diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py
index 2e273f53b69..395bf3e8d60 100644
--- a/openerp/addons/base/ir/ir_model.py
+++ b/openerp/addons/base/ir/ir_model.py
@@ -63,7 +63,7 @@ class ir_model(osv.osv):
models = self.browse(cr, uid, ids, context=context)
res = dict.fromkeys(ids)
for model in models:
- res[model.id] = isinstance(self.pool.get(model.model), osv.osv_memory)
+ res[model.id] = self.pool.get(model.model).is_transient()
return res
def _search_osv_memory(self, cr, uid, model, name, domain, context=None):
@@ -165,7 +165,7 @@ class ir_model(osv.osv):
pass
x_custom_model._name = model
x_custom_model._module = False
- a = x_custom_model.createInstance(self.pool, cr)
+ a = x_custom_model.create_instance(self.pool, cr)
if (not a._columns) or ('x_name' in a._columns.keys()):
x_name = 'x_name'
else:
@@ -481,14 +481,12 @@ class ir_model_access(osv.osv):
if isinstance(model, browse_record):
assert model._table_name == 'ir.model', 'Invalid model object'
- model_name = model.name
+ model_name = model.model
else:
model_name = model
- # osv_memory objects can be read by everyone, as they only return
- # results that belong to the current user (except for superuser)
- model_obj = self.pool.get(model_name)
- if isinstance(model_obj, osv.osv_memory):
+ # TransientModel records have no access rights, only an implicit access rule
+ if self.pool.get(model_name).is_transient():
return True
# We check if a specific rule exists
@@ -523,7 +521,7 @@ class ir_model_access(osv.osv):
}
raise except_orm(_('AccessError'), msgs[mode] % (model_name, groups) )
- return r
+ return r or False
__cache_clearing_methods = []
diff --git a/openerp/addons/base/ir/ir_rule.py b/openerp/addons/base/ir/ir_rule.py
index 734d00eb9a2..33f926e55c2 100644
--- a/openerp/addons/base/ir/ir_rule.py
+++ b/openerp/addons/base/ir/ir_rule.py
@@ -26,8 +26,7 @@ from functools import partial
import tools
from tools.safe_eval import safe_eval as eval
from tools.misc import unquote as unquote
-
-SUPERUSER_UID = 1
+from openerp import SUPERUSER_ID
class ir_rule(osv.osv):
_name = 'ir.rule'
@@ -68,7 +67,7 @@ class ir_rule(osv.osv):
return res
def _check_model_obj(self, cr, uid, ids, context=None):
- return not any(isinstance(self.pool.get(rule.model_id.model), osv.osv_memory) for rule in self.browse(cr, uid, ids, context))
+ return not any(self.pool.get(rule.model_id.model).is_transient() for rule in self.browse(cr, uid, ids, context))
_columns = {
'name': fields.char('Name', size=128, select=1),
@@ -104,7 +103,7 @@ class ir_rule(osv.osv):
if mode not in self._MODES:
raise ValueError('Invalid mode: %r' % (mode,))
- if uid == SUPERUSER_UID:
+ if uid == SUPERUSER_ID:
return None
cr.execute("""SELECT r.id
FROM ir_rule r
@@ -117,10 +116,10 @@ class ir_rule(osv.osv):
rule_ids = [x[0] for x in cr.fetchall()]
if rule_ids:
# browse user as super-admin root to avoid access errors!
- user = self.pool.get('res.users').browse(cr, SUPERUSER_UID, uid)
+ user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid)
global_domains = [] # list of domains
group_domains = {} # map: group -> list of domains
- for rule in self.browse(cr, SUPERUSER_UID, rule_ids):
+ for rule in self.browse(cr, SUPERUSER_ID, rule_ids):
# read 'domain' as UID to have the correct eval context for the rule.
rule_domain = self.read(cr, uid, rule.id, ['domain'])['domain']
dom = expression.normalize(rule_domain)
diff --git a/openerp/addons/base/ir/osv_memory_autovacuum.py b/openerp/addons/base/ir/osv_memory_autovacuum.py
index b2ab938d740..975fcd0a403 100644
--- a/openerp/addons/base/ir/osv_memory_autovacuum.py
+++ b/openerp/addons/base/ir/osv_memory_autovacuum.py
@@ -19,18 +19,15 @@
#
##############################################################################
-from osv import osv
-from osv.orm import orm_memory
+import openerp
-class osv_memory_autovacuum(osv.osv_memory):
+class osv_memory_autovacuum(openerp.osv.osv.osv_memory):
+ """ Expose the osv_memory.vacuum() method to the cron jobs mechanism. """
_name = 'osv_memory.autovacuum'
def power_on(self, cr, uid, context=None):
- for model in self.pool.obj_list():
- obj = self.pool.get(model)
- if isinstance(obj, orm_memory):
- obj.vaccum(cr, uid)
+ for model in self.pool.models.values():
+ if model.is_transient():
+ model._transient_vacuum(cr, uid)
return True
-osv_memory_autovacuum()
-
diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py
index bb6a51a6bcb..01d8b745e6f 100644
--- a/openerp/addons/base/res/res_currency.py
+++ b/openerp/addons/base/res/res_currency.py
@@ -91,7 +91,7 @@ class res_currency(osv.osv):
(name, (COALESCE(company_id,-1)))""")
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
- res = super(osv.osv, self).read(cr, user, ids, fields, context, load)
+ res = super(res_currency, self).read(cr, user, ids, fields, context, load)
currency_rate_obj = self.pool.get('res.currency.rate')
for r in res:
if r.__contains__('rate_ids'):
diff --git a/openerp/addons/base/test/base_test.yml b/openerp/addons/base/test/base_test.yml
index 5a17ca108c3..6ea578a8659 100644
--- a/openerp/addons/base/test/base_test.yml
+++ b/openerp/addons/base/test/base_test.yml
@@ -144,45 +144,3 @@
!python {model: res.partner.category}: |
self.pool._init = True
--
- "OSV Memory: Verify that osv_memory properly handles large data allocation"
--
- 1. No "count-based" auto-vaccuum when max_count is disabled
--
- !python {model: base.language.export}: |
- # setup special limits for the test, these will be reset at next pool reload anyway
- self._max_count = None
- num_recs = 250
- for i in xrange(num_recs):
- self.create(cr, uid, {'format':'po'})
- assert (len(self.datas) >= num_recs), "OSV Memory must not auto-vaccum records from the current transaction if max_count is not set"
--
- 2. Auto-vaccuum should be enabled when max_count is set
--
- !python {model: base.language.export}: |
- # setup special limits for the test, these will be reset at next pool reload anyway
- self._max_count = 100
- num_recs = 219
- for i in xrange(num_recs):
- self.create(cr, uid, {'name': i, 'format':'po'})
- assert (self._max_count <= len(self.datas) < self._max_count + self._check_time), "OSV Memory must auto-expire records when max_count is reached"
- for k,v in self.datas.iteritems():
- assert (int(v['name']) >= (num_recs - (self._max_count + self._check_time))), "OSV Memory must auto-expire records based on age"
--
- 3. Auto-vaccuum should be based on age only when max_count is not set
--
- !python {model: base.language.export}: |
- # setup special limits for the test, these will be reset at next pool reload anyway
- self._max_count = None
- self._max_hours = 0.01 #36 seconds
- num_recs = 200
- for i in xrange(num_recs):
- self.create(cr, uid, {'format':'po'})
- assert (len(self.datas) >= num_recs), "OSV Memory must not auto-expire records from the current transaction"
-
- # expire all records
- for k,v in self.datas.iteritems():
- v['internal.date_access'] = 0
- self.vaccum(cr, 1, force=True)
-
- assert (len(self.datas) == 0), "OSV Memory must expire old records after vaccuum"
diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py
index 40986580d1b..b06368ba1b2 100644
--- a/openerp/modules/loading.py
+++ b/openerp/modules/loading.py
@@ -339,16 +339,16 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
cr.execute("""select model,name from ir_model where id NOT IN (select distinct model_id from ir_model_access)""")
for (model, name) in cr.fetchall():
model_obj = pool.get(model)
- if model_obj and not isinstance(model_obj, osv.osv.osv_memory):
- logger.notifyChannel('init', netsvc.LOG_WARNING, 'object %s (%s) has no access rules!' % (model, name))
+ if model_obj and not model_obj.is_transient():
+ logger.notifyChannel('init', netsvc.LOG_WARNING, 'Model %s (%s) has no access rules!' % (model, name))
# Temporary warning while we remove access rights on osv_memory objects, as they have
# been replaced by owner-only access rights
cr.execute("""select distinct mod.model, mod.name from ir_model_access acc, ir_model mod where acc.model_id = mod.id""")
for (model, name) in cr.fetchall():
model_obj = pool.get(model)
- if isinstance(model_obj, osv.osv.osv_memory) and not isinstance(model_obj, osv.osv.osv):
- logger.notifyChannel('init', netsvc.LOG_WARNING, 'In-memory object %s (%s) should not have explicit access rules!' % (model, name))
+ if model_obj and model_obj.is_transient():
+ logger.notifyChannel('init', netsvc.LOG_WARNING, 'The transient model %s (%s) should not have explicit access rules!' % (model, name))
cr.execute("SELECT model from ir_model")
for (model,) in cr.fetchall():
@@ -356,7 +356,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
if obj:
obj._check_removed_columns(cr, log=True)
else:
- logger.notifyChannel('init', netsvc.LOG_WARNING, "Model %s is referenced but not present in the orm pool!" % model)
+ logger.notifyChannel('init', netsvc.LOG_WARNING, "Model %s is declared but cannot be loaded! (Perhaps a module was partially removed or renamed)" % model)
# Cleanup orphan records
pool.get('ir.model.data')._process_end(cr, 1, processed_modules)
diff --git a/openerp/modules/module.py b/openerp/modules/module.py
index a33c2651a85..b40e186e9a1 100644
--- a/openerp/modules/module.py
+++ b/openerp/modules/module.py
@@ -277,7 +277,6 @@ def init_module_models(cr, module_name, obj_list):
TODO better explanation of _auto_init and init.
"""
-
logger.notifyChannel('init', netsvc.LOG_INFO,
'module %s: creating or updating database tables' % module_name)
todo = []
diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py
index f35adadbf2f..ea6d863e442 100644
--- a/openerp/modules/registry.py
+++ b/openerp/modules/registry.py
@@ -89,10 +89,10 @@ class Registry(object):
res = []
- # Instantiate registered classes (via metamodel discovery or via explicit
- # constructor call), and add them to the pool.
+ # Instantiate registered classes (via the MetaModel automatic discovery
+ # or via explicit constructor call), and add them to the pool.
for cls in openerp.osv.orm.MetaModel.module_to_models.get(module.name, []):
- res.append(cls.createInstance(self, cr))
+ res.append(cls.create_instance(self, cr))
return res
diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py
index ff2528db73d..cb8cfea583f 100644
--- a/openerp/osv/expression.py
+++ b/openerp/osv/expression.py
@@ -450,7 +450,7 @@ class expression(object):
# field could not be found in model columns, it's probably invalid, unless
# it's one of the _log_access special fields
# TODO: make these fields explicitly available in self.columns instead!
- if (field_path[0] not in MAGIC_COLUMNS) and (left not in MAGIC_COLUMNS):
+ if field_path[0] not in MAGIC_COLUMNS:
raise ValueError("Invalid field %r in domain expression %r" % (left, exp))
continue
diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py
index ccc1d740403..6619e66b075 100644
--- a/openerp/osv/fields.py
+++ b/openerp/osv/fields.py
@@ -72,7 +72,7 @@ class _column(object):
_symbol_set = (_symbol_c, _symbol_f)
_symbol_get = None
- def __init__(self, string='unknown', required=False, readonly=False, domain=None, context=None, states=None, priority=0, change_default=False, size=None, ondelete="set null", translate=False, select=False, manual=False, **args):
+ def __init__(self, string='unknown', required=False, readonly=False, domain=None, context=None, states=None, priority=0, change_default=False, size=None, ondelete=None, translate=False, select=False, manual=False, **args):
"""
The 'manual' keyword argument specifies if the field is a custom one.
@@ -91,7 +91,7 @@ class _column(object):
self.help = args.get('help', '')
self.priority = priority
self.change_default = change_default
- self.ondelete = ondelete
+ self.ondelete = ondelete.lower() if ondelete else None # defaults to 'set null' in ORM
self.translate = translate
self._domain = domain
self._context = context
@@ -112,12 +112,6 @@ class _column(object):
def set(self, cr, obj, id, name, value, user=None, context=None):
cr.execute('update '+obj._table+' set '+name+'='+self._symbol_set[0]+' where id=%s', (self._symbol_set[1](value), id))
- def set_memory(self, cr, obj, id, name, value, user=None, context=None):
- raise Exception(_('Not implemented set_memory method !'))
-
- def get_memory(self, cr, obj, ids, name, user=None, context=None, values=None):
- raise Exception(_('Not implemented get_memory method !'))
-
def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
raise Exception(_('undefined get method !'))
@@ -126,9 +120,6 @@ class _column(object):
res = obj.read(cr, uid, ids, [name], context=context)
return [x[name] for x in res]
- def search_memory(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, context=None):
- raise Exception(_('Not implemented search_memory method !'))
-
# ---------------------------------------------------------
# Simple fields
@@ -269,7 +260,7 @@ class binary(_column):
_column.__init__(self, string=string, **args)
self.filters = filters
- def get_memory(self, cr, obj, ids, name, user=None, context=None, values=None):
+ def get(self, cr, obj, ids, name, user=None, context=None, values=None):
if not context:
context = {}
if not values:
@@ -293,9 +284,6 @@ class binary(_column):
res[i] = val
return res
- get = get_memory
-
-
class selection(_column):
_type = 'selection'
@@ -355,30 +343,6 @@ class many2one(_column):
_column.__init__(self, string=string, **args)
self._obj = obj
- def set_memory(self, cr, obj, id, field, values, user=None, context=None):
- obj.datas.setdefault(id, {})
- obj.datas[id][field] = values
-
- def get_memory(self, cr, obj, ids, name, user=None, context=None, values=None):
- result = {}
- for id in ids:
- result[id] = obj.datas[id].get(name, False)
-
- # build a dictionary of the form {'id_of_distant_resource': name_of_distant_resource}
- # we use uid=1 because the visibility of a many2one field value (just id and name)
- # must be the access right of the parent form and not the linked object itself.
- obj = obj.pool.get(self._obj)
- records = dict(obj.name_get(cr, 1,
- list(set([x for x in result.values() if x and isinstance(x, (int,long))])),
- context=context))
- for id in ids:
- if result[id] in records:
- result[id] = (result[id], records[result[id]])
- else:
- result[id] = False
-
- return result
-
def get(self, cr, obj, ids, name, user=None, context=None, values=None):
if context is None:
context = {}
@@ -447,55 +411,6 @@ class one2many(_column):
#one2many can't be used as condition for defaults
assert(self.change_default != True)
- def get_memory(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
- if context is None:
- context = {}
- if self._context:
- context = context.copy()
- context.update(self._context)
- if not values:
- values = {}
- res = {}
- for id in ids:
- res[id] = []
- ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id, 'in', ids)], limit=self._limit, context=context)
- for r in obj.pool.get(self._obj).read(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'):
- if r[self._fields_id] in res:
- res[r[self._fields_id]].append(r['id'])
- return res
-
- def set_memory(self, cr, obj, id, field, values, user=None, context=None):
- if not context:
- context = {}
- if self._context:
- context = context.copy()
- context.update(self._context)
- if not values:
- return
- obj = obj.pool.get(self._obj)
- for act in values:
- if act[0] == 0:
- act[2][self._fields_id] = id
- obj.create(cr, user, act[2], context=context)
- elif act[0] == 1:
- obj.write(cr, user, [act[1]], act[2], context=context)
- elif act[0] == 2:
- obj.unlink(cr, user, [act[1]], context=context)
- elif act[0] == 3:
- obj.datas[act[1]][self._fields_id] = False
- elif act[0] == 4:
- obj.datas[act[1]][self._fields_id] = id
- elif act[0] == 5:
- for o in obj.datas.values():
- if o[self._fields_id] == id:
- o[self._fields_id] = False
- elif act[0] == 6:
- for id2 in (act[2] or []):
- obj.datas[id2][self._fields_id] = id
-
- def search_memory(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, operator='like', context=None):
- raise _('Not Implemented')
-
def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
if context is None:
context = {}
@@ -578,14 +493,34 @@ class one2many(_column):
# (6, ?, ids) set a list of links
#
class many2many(_column):
+ """Encapsulates the logic of a many-to-many bidirectional relationship, handling the
+ low-level details of the intermediary relationship table transparently.
+
+ :param str obj: destination model
+ :param str rel: optional name of the intermediary relationship table. If not specified,
+ a canonical name will be derived based on the alphabetically-ordered
+ model names of the source and destination (in the form: ``amodel_bmodel_rel``).
+ Automatic naming is not possible when the source and destination are
+ the same, for obvious ambiguity reasons.
+ :param str id1: optional name for the column holding the foreign key to the current
+ model in the relationship table. If not specified, a canonical name
+ will be derived based on the model name (in the form: `src_model_id`).
+ :param str id2: optional name for the column holding the foreign key to the destination
+ model in the relationship table. If not specified, a canonical name
+ will be derived based on the model name (in the form: `dest_model_id`)
+ :param str string: field label
+ """
_classic_read = False
_classic_write = False
_prefetch = False
_type = 'many2many'
- def __init__(self, obj, rel, id1, id2, string='unknown', limit=None, **args):
+
+ def __init__(self, obj, rel=None, id1=None, id2=None, string='unknown', limit=None, **args):
+ """
+ """
_column.__init__(self, string=string, **args)
self._obj = obj
- if '.' in rel:
+ if rel and '.' in rel:
raise Exception(_('The second argument of the many2many field %s must be a SQL table !'\
'You used %s, which is not a valid SQL table name.')% (string,rel))
self._rel = rel
@@ -593,7 +528,30 @@ class many2many(_column):
self._id2 = id2
self._limit = limit
- def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
+ def _sql_names(self, source_model):
+ """Return the SQL names defining the structure of the m2m relationship table
+
+ :return: (m2m_table, local_col, dest_col) where m2m_table is the table name,
+ local_col is the name of the column holding the current model's FK, and
+ dest_col is the name of the column holding the destination model's FK, and
+ """
+ tbl, col1, col2 = self._rel, self._id1, self._id2
+ if not all((tbl, col1, col2)):
+ # the default table name is based on the stable alphabetical order of tables
+ dest_model = source_model.pool.get(self._obj)
+ tables = tuple(sorted([source_model._table, dest_model._table]))
+ if not tbl:
+ assert tables[0] != tables[1], 'Implicit/Canonical naming of m2m relationship table '\
+ 'is not possible when source and destination models are '\
+ 'the same'
+ tbl = '%s_%s_rel' % tables
+ if not col1:
+ col1 = '%s_id' % source_model._table
+ if not col2:
+ col2 = '%s_id' % dest_model._table
+ return (tbl, col1, col2)
+
+ def get(self, cr, model, ids, name, user=None, offset=0, context=None, values=None):
if not context:
context = {}
if not values:
@@ -606,7 +564,8 @@ class many2many(_column):
if offset:
warnings.warn("Specifying offset at a many2many.get() may produce unpredictable results.",
DeprecationWarning, stacklevel=2)
- obj = obj.pool.get(self._obj)
+ obj = model.pool.get(self._obj)
+ rel, id1, id2 = self._sql_names(model)
# static domains are lists, and are evaluated both here and on client-side, while string
# domains supposed by dynamic and evaluated on client-side only (thus ignored here)
@@ -636,11 +595,11 @@ class many2many(_column):
%(order_by)s \
%(limit)s \
OFFSET %(offset)d' \
- % {'rel': self._rel,
+ % {'rel': rel,
'from_c': from_c,
'tbl': obj._table,
- 'id1': self._id1,
- 'id2': self._id2,
+ 'id1': id1,
+ 'id2': id2,
'where_c': where_c,
'limit': limit_str,
'order_by': order_by,
@@ -651,31 +610,32 @@ class many2many(_column):
res[r[1]].append(r[0])
return res
- def set(self, cr, obj, id, name, values, user=None, context=None):
+ def set(self, cr, model, id, name, values, user=None, context=None):
if not context:
context = {}
if not values:
return
- obj = obj.pool.get(self._obj)
+ rel, id1, id2 = self._sql_names(model)
+ obj = model.pool.get(self._obj)
for act in values:
if not (isinstance(act, list) or isinstance(act, tuple)) or not act:
continue
if act[0] == 0:
idnew = obj.create(cr, user, act[2], context=context)
- cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%s,%s)', (id, idnew))
+ cr.execute('insert into '+rel+' ('+id1+','+id2+') values (%s,%s)', (id, idnew))
elif act[0] == 1:
obj.write(cr, user, [act[1]], act[2], context=context)
elif act[0] == 2:
obj.unlink(cr, user, [act[1]], context=context)
elif act[0] == 3:
- cr.execute('delete from '+self._rel+' where ' + self._id1 + '=%s and '+ self._id2 + '=%s', (id, act[1]))
+ cr.execute('delete from '+rel+' where ' + id1 + '=%s and '+ id2 + '=%s', (id, act[1]))
elif act[0] == 4:
# following queries are in the same transaction - so should be relatively safe
- cr.execute('SELECT 1 FROM '+self._rel+' WHERE '+self._id1+' = %s and '+self._id2+' = %s', (id, act[1]))
+ cr.execute('SELECT 1 FROM '+rel+' WHERE '+id1+' = %s and '+id2+' = %s', (id, act[1]))
if not cr.fetchone():
- cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%s,%s)', (id, act[1]))
+ cr.execute('insert into '+rel+' ('+id1+','+id2+') values (%s,%s)', (id, act[1]))
elif act[0] == 5:
- cr.execute('delete from '+self._rel+' where ' + self._id1 + ' = %s', (id,))
+ cr.execute('delete from '+rel+' where ' + id1 + ' = %s', (id,))
elif act[0] == 6:
d1, d2,tables = obj.pool.get('ir.rule').domain_get(cr, user, obj._name, context=context)
@@ -683,10 +643,10 @@ class many2many(_column):
d1 = ' and ' + ' and '.join(d1)
else:
d1 = ''
- cr.execute('delete from '+self._rel+' where '+self._id1+'=%s AND '+self._id2+' IN (SELECT '+self._rel+'.'+self._id2+' FROM '+self._rel+', '+','.join(tables)+' WHERE '+self._rel+'.'+self._id1+'=%s AND '+self._rel+'.'+self._id2+' = '+obj._table+'.id '+ d1 +')', [id, id]+d2)
+ cr.execute('delete from '+rel+' where '+id1+'=%s AND '+id2+' IN (SELECT '+rel+'.'+id2+' FROM '+rel+', '+','.join(tables)+' WHERE '+rel+'.'+id1+'=%s AND '+rel+'.'+id2+' = '+obj._table+'.id '+ d1 +')', [id, id]+d2)
for act_nbr in act[2]:
- cr.execute('insert into '+self._rel+' ('+self._id1+','+self._id2+') values (%s, %s)', (id, act_nbr))
+ cr.execute('insert into '+rel+' ('+id1+','+id2+') values (%s, %s)', (id, act_nbr))
#
# TODO: use a name_search
@@ -694,32 +654,6 @@ class many2many(_column):
def search(self, cr, obj, args, name, value, offset=0, limit=None, uid=None, operator='like', context=None):
return obj.pool.get(self._obj).search(cr, uid, args+self._domain+[('name', operator, value)], offset, limit, context=context)
- def get_memory(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
- result = {}
- for id in ids:
- result[id] = obj.datas[id].get(name, [])
- return result
-
- def set_memory(self, cr, obj, id, name, values, user=None, context=None):
- if not values:
- return
- for act in values:
- # TODO: use constants instead of these magic numbers
- if act[0] == 0:
- raise _('Not Implemented')
- elif act[0] == 1:
- raise _('Not Implemented')
- elif act[0] == 2:
- raise _('Not Implemented')
- elif act[0] == 3:
- raise _('Not Implemented')
- elif act[0] == 4:
- raise _('Not Implemented')
- elif act[0] == 5:
- raise _('Not Implemented')
- elif act[0] == 6:
- obj.datas[id][name] = act[2]
-
def get_nice_size(value):
size = 0
@@ -801,8 +735,8 @@ class function(_column):
Implements the function field.
- :param orm_template model: model to which the field belongs (should be ``self`` for
- a model method)
+ :param orm model: model to which the field belongs (should be ``self`` for
+ a model method)
:param field_name(s): name of the field to compute, or if ``multi`` is provided,
list of field names to compute.
:type field_name(s): str | [str]
@@ -865,8 +799,8 @@ class function(_column):
Callable that implements the ``write`` operation for the function field.
- :param orm_template model: model to which the field belongs (should be ``self`` for
- a model method)
+ :param orm model: model to which the field belongs (should be ``self`` for
+ a model method)
:param int id: the identifier of the object to write on
:param str field_name: name of the field to set
:param fnct_inv_arg: arbitrary value passed when declaring the function field
@@ -887,10 +821,10 @@ class function(_column):
a search criterion based on the function field into a new domain based only on
columns that are stored in the database.
- :param orm_template model: model to which the field belongs (should be ``self`` for
- a model method)
- :param orm_template model_again: same value as ``model`` (seriously! this is for backwards
- compatibility)
+ :param orm model: model to which the field belongs (should be ``self`` for
+ a model method)
+ :param orm model_again: same value as ``model`` (seriously! this is for backwards
+ compatibility)
:param str field_name: name of the field to search on
:param list criterion: domain component specifying the search criterion on the field.
:rtype: list
@@ -935,7 +869,7 @@ class function(_column):
corresponding records in the source model (whose field values
need to be recomputed).
- :param orm_template model: trigger_model
+ :param orm model: trigger_model
:param list trigger_ids: ids of the records of trigger_model that were
modified
:rtype: list
@@ -1064,14 +998,11 @@ class function(_column):
result[id] = self.postprocess(cr, uid, obj, name, result[id], context)
return result
- get_memory = get
-
def set(self, cr, obj, id, name, value, user=None, context=None):
if not context:
context = {}
if self._fnct_inv:
self._fnct_inv(obj, cr, user, id, name, value, self._fnct_inv_arg, context)
- set_memory = set
# ---------------------------------------------------------
# Related fields
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index ece5102e3f6..6d205feeb43 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -45,24 +45,25 @@ import calendar
import copy
import datetime
import logging
-import warnings
import operator
import pickle
import re
+import simplejson
import time
import traceback
import types
-import simplejson
-
-import openerp.netsvc as netsvc
+import warnings
from lxml import etree
-from openerp.tools.config import config
-from openerp.tools.translate import _
import fields
-from query import Query
+import openerp
+import openerp.netsvc as netsvc
import openerp.tools as tools
+from openerp.tools.config import config
from openerp.tools.safe_eval import safe_eval as eval
+from openerp.tools.translate import _
+from openerp import SUPERUSER_ID
+from query import Query
# List of etree._Element subclasses that we choose to ignore when parsing XML.
from openerp.tools import SKIPPED_ELEMENT_TYPES
@@ -70,9 +71,6 @@ from openerp.tools import SKIPPED_ELEMENT_TYPES
regex_order = re.compile('^(([a-z0-9_]+|"[a-z0-9_]+")( *desc| *asc)?( *, *|))+$', re.I)
regex_object_name = re.compile(r'^[a-z0-9_.]+$')
-# Super-user identifier (aka Administrator aka root)
-ROOT_USER_ID = 1
-
def transfer_field_to_modifiers(field, modifiers):
default_values = {}
state_exceptions = {}
@@ -585,22 +583,36 @@ class MetaModel(type):
self.module_to_models.setdefault(self._module, []).append(self)
-class orm_template(object):
+# Definition of log access columns, automatically added to models if
+# self._log_access is True
+LOG_ACCESS_COLUMNS = {
+ 'create_uid': 'INTEGER REFERENCES res_users ON DELETE SET NULL',
+ 'create_date': 'TIMESTAMP',
+ 'write_uid': 'INTEGER REFERENCES res_users ON DELETE SET NULL',
+ 'write_date': 'TIMESTAMP'
+}
+# special columns automatically created by the ORM
+MAGIC_COLUMNS = ['id'] + LOG_ACCESS_COLUMNS.keys()
+
+class BaseModel(object):
""" Base class for OpenERP models.
- OpenERP models are created by inheriting from this class (although
- not directly; more specifically by inheriting from osv or
- osv_memory). The constructor is called once, usually directly
- after the class definition, e.g.:
+ OpenERP models are created by inheriting from this class' subclasses:
- class user(osv):
- ...
- user()
+ * Model: for regular database-persisted models
+ * TransientModel: for temporary data, stored in the database but automatically
+ vaccuumed every so often
+ * AbstractModel: for abstract super classes meant to be shared by multiple
+ _inheriting classes (usually Models or TransientModels)
- The system will later instanciate the class once per database (on
+ The system will later instantiate the class once per database (on
which the class' module is installed).
+ To create a class that should not be instantiated, the _register class attribute
+ may be set to False.
"""
+ __metaclass__ = MetaModel
+ _register = False # Set to false if the model shouldn't be automatically discovered.
_name = None
_columns = {}
_constraints = []
@@ -614,6 +626,12 @@ class orm_template(object):
_sequence = None
_description = None
+ # Transience
+ _transient = False # True in a TransientModel
+ _transient_max_count = None
+ _transient_max_hours = None
+ _transient_check_time = 20
+
# structure:
# { 'parent_model': 'm2o_field', ... }
_inherits = {}
@@ -636,6 +654,10 @@ class orm_template(object):
_table = None
_invalids = set()
_log_create = False
+ _sql_constraints = []
+ _protected = ['read', 'write', 'create', 'default_get', 'perm_read', 'unlink', 'fields_get', 'fields_view_get', 'search', 'name_get', 'distinct_field_get', 'name_search', 'copy', 'import_data', 'search_count', 'exists']
+ __logger = logging.getLogger('orm')
+ __schema = logging.getLogger('orm.schema')
CONCURRENCY_CHECK_FIELD = '__last_update'
@@ -656,9 +678,6 @@ class orm_template(object):
"""Override this method to do specific things when a view on the object is opened."""
pass
- def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
- raise NotImplementedError(_('The read_group method is not implemented on this object !'))
-
def _field_create(self, cr, context=None):
""" Create entries in ir_model_fields for all the model's fields.
@@ -761,19 +780,12 @@ class orm_template(object):
break
cr.commit()
- def _auto_init(self, cr, context=None):
- raise_on_invalid_object_name(self._name)
- self._field_create(cr, context=context)
-
- def _auto_end(self, cr, context=None):
- pass
-
#
# Goal: try to apply inheritance at the instanciation level and
# put objects in the pool var
#
@classmethod
- def makeInstance(cls, pool, cr, attributes):
+ def create_instance(cls, pool, cr):
""" Instanciate a given model.
This class method instanciates the class of some model (i.e. a class
@@ -788,6 +800,9 @@ class orm_template(object):
this method. This is probably unnecessary.
"""
+ attributes = ['_columns', '_defaults', '_inherits', '_constraints',
+ '_sql_constraints']
+
parent_names = getattr(cls, '_inherit', None)
if parent_names:
if isinstance(parent_names, (str, unicode)):
@@ -843,7 +858,10 @@ class orm_template(object):
This doesn't create an instance but simply register the model
as being part of the module where it is defined.
+
"""
+
+
# Set the module name (e.g. base, sale, accounting, ...) on the class.
module = cls.__module__.split('.')[0]
if not hasattr(cls, '_module'):
@@ -860,7 +878,15 @@ class orm_template(object):
return None
def __init__(self, pool, cr):
- """ Initialize a model and make it part of the given registry."""
+ """ Initialize a model and make it part of the given registry.
+
+ - copy the stored fields' functions in the osv_pool,
+ - update the _columns with the fields found in ir_model_fields,
+ - ensure there is a many2one for each _inherits'd parent,
+ - update the children's _columns,
+ - give a chance to each field to initialize itself.
+
+ """
pool.add(self._name, self)
self.pool = pool
@@ -877,26 +903,96 @@ class orm_template(object):
if not self._table:
self._table = self._name.replace('.', '_')
- def browse(self, cr, uid, select, context=None, list_class=None, fields_process=None):
- """Fetch records as objects allowing to use dot notation to browse fields and relations
+ if not hasattr(self, '_log_access'):
+ # If _log_access is not specified, it is the same value as _auto.
+ self._log_access = getattr(self, "_auto", True)
- :param cr: database cursor
- :param user: current user id
- :param select: id or list of ids.
- :param context: context arguments, like lang, time zone
- :rtype: object or list of objects requested
+ self._columns = self._columns.copy()
+ for store_field in self._columns:
+ f = self._columns[store_field]
+ if hasattr(f, 'digits_change'):
+ f.digits_change(cr)
+ if not isinstance(f, fields.function):
+ continue
+ if not f.store:
+ continue
+ if self._columns[store_field].store is True:
+ sm = {self._name: (lambda self, cr, uid, ids, c={}: ids, None, 10, None)}
+ else:
+ sm = self._columns[store_field].store
+ for object, aa in sm.items():
+ if len(aa) == 4:
+ (fnct, fields2, order, length) = aa
+ elif len(aa) == 3:
+ (fnct, fields2, order) = aa
+ length = None
+ else:
+ raise except_orm('Error',
+ ('Invalid function definition %s in object %s !\nYou must use the definition: store={object:(fnct, fields, priority, time length)}.' % (store_field, self._name)))
+ self.pool._store_function.setdefault(object, [])
+ ok = True
+ for x, y, z, e, f, l in self.pool._store_function[object]:
+ if (x==self._name) and (y==store_field) and (e==fields2):
+ if f == order:
+ ok = False
+ if ok:
+ self.pool._store_function[object].append( (self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length))
+ self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
- """
- self._list_class = list_class or browse_record_list
- cache = {}
- # need to accepts ints and longs because ids coming from a method
- # launched by button in the interface have a type long...
- if isinstance(select, (int, long)):
- return browse_record(cr, uid, select, self, cache, context=context, list_class=self._list_class, fields_process=fields_process)
- elif isinstance(select, list):
- return self._list_class([browse_record(cr, uid, id, self, cache, context=context, list_class=self._list_class, fields_process=fields_process) for id in select], context=context)
- else:
- return browse_null()
+ for (key, _, msg) in self._sql_constraints:
+ self.pool._sql_error[self._table+'_'+key] = msg
+
+ # Load manual fields
+
+ cr.execute("SELECT id FROM ir_model_fields WHERE name=%s AND model=%s", ('state', 'ir.model.fields'))
+ if cr.fetchone():
+ cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))
+ for field in cr.dictfetchall():
+ if field['name'] in self._columns:
+ continue
+ attrs = {
+ 'string': field['field_description'],
+ 'required': bool(field['required']),
+ 'readonly': bool(field['readonly']),
+ 'domain': eval(field['domain']) if field['domain'] else None,
+ 'size': field['size'],
+ 'ondelete': field['on_delete'],
+ 'translate': (field['translate']),
+ 'manual': True,
+ #'select': int(field['select_level'])
+ }
+
+ if field['ttype'] == 'selection':
+ self._columns[field['name']] = fields.selection(eval(field['selection']), **attrs)
+ elif field['ttype'] == 'reference':
+ self._columns[field['name']] = fields.reference(selection=eval(field['selection']), **attrs)
+ elif field['ttype'] == 'many2one':
+ self._columns[field['name']] = fields.many2one(field['relation'], **attrs)
+ elif field['ttype'] == 'one2many':
+ self._columns[field['name']] = fields.one2many(field['relation'], field['relation_field'], **attrs)
+ elif field['ttype'] == 'many2many':
+ _rel1 = field['relation'].replace('.', '_')
+ _rel2 = field['model'].replace('.', '_')
+ _rel_name = 'x_%s_%s_%s_rel' % (_rel1, _rel2, field['name'])
+ self._columns[field['name']] = fields.many2many(field['relation'], _rel_name, 'id1', 'id2', **attrs)
+ else:
+ self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs)
+ self._inherits_check()
+ self._inherits_reload()
+ if not self._sequence:
+ self._sequence = self._table + '_id_seq'
+ for k in self._defaults:
+ assert (k in self._columns) or (k in self._inherit_fields), 'Default function defined in %s but field %s does not exist !' % (self._name, k,)
+ for f in self._columns:
+ self._columns[f].restart()
+
+ # Transience
+ if self.is_transient():
+ self._transient_check_count = 0
+ self._transient_max_count = config.get('osv_memory_count_limit')
+ self._transient_max_hours = config.get('osv_memory_age_limit')
+ assert self._log_access, "TransientModels must have log_access turned on, "\
+ "in order to implement their access rights policy"
def __export_row(self, cr, uid, row, fields, context=None):
if context is None:
@@ -1260,30 +1356,6 @@ class orm_template(object):
self._parent_store_compute(cr)
return (position, 0, 0, 0)
- def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
- """
- Read records with given ids with the given fields
-
- :param cr: database cursor
- :param user: current user id
- :param ids: id or list of the ids of the records to read
- :param fields: optional list of field names to return (default: all fields would be returned)
- :type fields: list (example ['field_name_1', ...])
- :param context: optional context dictionary - it may contains keys for specifying certain options
- like ``context_lang``, ``context_tz`` to alter the results of the call.
- A special ``bin_size`` boolean flag may also be passed in the context to request the
- value of all fields.binary columns to be returned as the size of the binary instead of its
- contents. This can also be selectively overriden by passing a field-specific flag
- in the form ``bin_size_XXX: True/False`` where ``XXX`` is the name of the field.
- Note: The ``bin_size_XXX`` form is new in OpenERP v6.0.
- :return: list of dictionaries((dictionary per record asked)) with requested field values
- :rtype: [{‘name_of_the_field’: value, ...}, ...]
- :raise AccessError: * if user has no read rights on the requested object
- * if user tries to bypass access rules for read on the requested object
-
- """
- raise NotImplementedError(_('The read method is not implemented on this object !'))
-
def get_invalid_fields(self, cr, uid):
return list(self._invalids)
@@ -1416,19 +1488,6 @@ class orm_template(object):
defaults[key[8:]] = context[key]
return defaults
-
- def perm_read(self, cr, user, ids, context=None, details=True):
- raise NotImplementedError(_('The perm_read method is not implemented on this object !'))
-
- def unlink(self, cr, uid, ids, context=None):
- raise NotImplementedError(_('The unlink method is not implemented on this object !'))
-
- def write(self, cr, user, ids, vals, context=None):
- raise NotImplementedError(_('The write method is not implemented on this object !'))
-
- def create(self, cr, user, vals, context=None):
- raise NotImplementedError(_('The create method is not implemented on this object !'))
-
def fields_get_keys(self, cr, user, context=None):
res = self._columns.keys()
# TODO I believe this loop can be replace by
@@ -1437,56 +1496,6 @@ class orm_template(object):
res.extend(self.pool.get(parent).fields_get_keys(cr, user, context))
return res
-
- def fields_get(self, cr, user, allfields=None, context=None, write_access=True):
- """ Return the definition of each field.
-
- The returned value is a dictionary (indiced by field name) of
- dictionaries. The _inherits'd fields are included. The string,
- help, and selection (if present) attributes are translated.
-
- """
- if context is None:
- context = {}
-
- res = {}
-
- translation_obj = self.pool.get('ir.translation')
- for parent in self._inherits:
- res.update(self.pool.get(parent).fields_get(cr, user, allfields, context))
-
- for f, field in self._columns.iteritems():
- if allfields and f not in allfields:
- continue
-
- res[f] = fields.field_to_dict(self, cr, user, context, field)
-
- if not write_access:
- res[f]['readonly'] = True
- res[f]['states'] = {}
-
- if 'string' in res[f]:
- res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context.get('lang', False) or 'en_US')
- if res_trans:
- res[f]['string'] = res_trans
- if 'help' in res[f]:
- help_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'help', context.get('lang', False) or 'en_US')
- if help_trans:
- res[f]['help'] = help_trans
- if 'selection' in res[f]:
- if isinstance(field.selection, (tuple, list)):
- sel = field.selection
- sel2 = []
- for key, val in sel:
- val2 = None
- if val:
- val2 = translation_obj._get_source(cr, user, self._name + ',' + f, 'selection', context.get('lang', False) or 'en_US', val)
- sel2.append((key, val2 or val))
- res[f]['selection'] = sel2
-
- return res
-
-
#
# Overload this method if you need a window title which depends on the context
#
@@ -1522,8 +1531,8 @@ class orm_template(object):
""" Set invisible to true if the user is not in the specified groups. """
if node.get('groups'):
groups = node.get('groups').split(',')
- access_pool = self.pool.get('ir.model.access')
- can_see = any(access_pool.check_groups(cr, user, group) for group in groups)
+ ir_model_access = self.pool.get('ir.model.access')
+ can_see = any(ir_model_access.check_groups(cr, user, group) for group in groups)
if not can_see:
node.set('invisible', '1')
modifiers['invisible'] = True
@@ -2128,17 +2137,6 @@ class orm_template(object):
"""
return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
- def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
- """
- Private implementation of search() method, allowing specifying the uid to use for the access right check.
- This is useful for example when filling in the selection list for a drop-down and avoiding access rights errors,
- by specifying ``access_rights_uid=1`` to bypass access rights check, but not ir.rules!
-
- :param access_rights_uid: optional user ID to use when checking access rights
- (not for ir.rules, this is only for ir.model.access)
- """
- raise NotImplementedError(_('The search method is not implemented on this object !'))
-
def name_get(self, cr, user, ids, context=None):
"""Returns the preferred display value (text representation) for the records with the
given ``ids``. By default this will be the value of the ``name`` column, unless
@@ -2209,28 +2207,10 @@ class orm_template(object):
res = self.name_get(cr, access_rights_uid, ids, context)
return res
- def copy(self, cr, uid, id, default=None, context=None):
- raise NotImplementedError(_('The copy method is not implemented on this object !'))
-
- def exists(self, cr, uid, ids, context=None):
- """Checks whether the given id or ids exist in this model,
- and return the list of ids that do. This is simple to use for
- a truth test on a browse_record::
-
- if record.exists():
- pass
-
- :param ids: id or list of ids to check for existence
- :type ids: int or [int]
- :return: the list of ids that currently exist, out of
- the given `ids`
- """
- raise NotImplementedError(_('The exists method is not implemented on this object !'))
-
def read_string(self, cr, uid, id, langs, fields=None, context=None):
res = {}
res2 = {}
- self.pool.get('ir.model.access').check(cr, uid, 'ir.translation', 'read')
+ self.pool.get('ir.translation').check_read(cr, uid)
if not fields:
fields = self._columns.keys() + self._inherit_fields.keys()
#FIXME: collect all calls to _get_source into one SQL call.
@@ -2254,7 +2234,7 @@ class orm_template(object):
return res
def write_string(self, cr, uid, id, langs, vals, context=None):
- self.pool.get('ir.model.access').check(cr, uid, 'ir.translation', 'write')
+ self.pool.get('ir.translation').check_write(cr, uid)
#FIXME: try to only call the translation in one SQL
for lang in langs:
for field in vals:
@@ -2267,9 +2247,6 @@ class orm_template(object):
self.pool.get(table).write_string(cr, uid, id, langs, vals, context)
return True
- def _check_removed_columns(self, cr, log=False):
- raise NotImplementedError()
-
def _add_missing_default_values(self, cr, uid, values, context=None):
missing_defaults = []
avoid_tables = [] # avoid overriding inherited values when parent is set
@@ -2311,277 +2288,6 @@ class orm_template(object):
except AttributeError:
pass
- def check_access_rule(self, cr, uid, ids, operation, context=None):
- """Verifies that the operation given by ``operation`` is allowed for the user
- according to ir.rules.
-
- :param operation: one of ``write``, ``unlink``
- :raise except_orm: * if current ir.rules do not permit this operation.
- :return: None if the operation is allowed
- """
- raise NotImplementedError(_('The check_access_rule method is not implemented on this object !'))
-
-class orm_memory(orm_template):
-
- _protected = ['read', 'write', 'create', 'default_get', 'perm_read', 'unlink', 'fields_get', 'fields_view_get', 'search', 'name_get', 'distinct_field_get', 'name_search', 'copy', 'import_data', 'search_count', 'exists']
- _inherit_fields = {}
- _max_count = None
- _max_hours = None
- _check_time = 20
-
- @classmethod
- def createInstance(cls, pool, cr):
- return cls.makeInstance(pool, cr, ['_columns', '_defaults'])
-
- def __init__(self, pool, cr):
- super(orm_memory, self).__init__(pool, cr)
- self.datas = {}
- self.next_id = 0
- self.check_id = 0
- self._max_count = config.get('osv_memory_count_limit')
- self._max_hours = config.get('osv_memory_age_limit')
- cr.execute('delete from wkf_instance where res_type=%s', (self._name,))
-
- def _check_access(self, uid, object_id, mode):
- if uid != 1 and self.datas[object_id]['internal.create_uid'] != uid:
- raise except_orm(_('AccessError'), '%s access is only allowed on your own records for osv_memory objects except for the super-user' % mode.capitalize())
-
- def vaccum(self, cr, uid, force=False):
- """Run the vaccuum cleaning system, expiring and removing old records from the
- virtual osv_memory tables if the "max count" or "max age" conditions are enabled
- and have been reached. This method can be called very often (e.g. everytime a record
- is created), but will only actually trigger the cleanup process once out of
- "_check_time" times (by default once out of 20 calls)."""
- self.check_id += 1
- if (not force) and (self.check_id % self._check_time):
- return True
- tounlink = []
-
- # Age-based expiration
- if self._max_hours:
- max = time.time() - self._max_hours * 60 * 60
- for k,v in self.datas.iteritems():
- if v['internal.date_access'] < max:
- tounlink.append(k)
- self.unlink(cr, ROOT_USER_ID, tounlink)
-
- # Count-based expiration
- if self._max_count and len(self.datas) > self._max_count:
- # sort by access time to remove only the first/oldest ones in LRU fashion
- records = self.datas.items()
- records.sort(key=lambda x:x[1]['internal.date_access'])
- self.unlink(cr, ROOT_USER_ID, [x[0] for x in records[:len(self.datas)-self._max_count]])
-
- return True
-
- def read(self, cr, user, ids, fields_to_read=None, context=None, load='_classic_read'):
- if not context:
- context = {}
- if not fields_to_read:
- fields_to_read = self._columns.keys()
- result = []
- if self.datas:
- ids_orig = ids
- if isinstance(ids, (int, long)):
- ids = [ids]
- for id in ids:
- r = {'id': id}
- for f in fields_to_read:
- record = self.datas.get(id)
- if record:
- self._check_access(user, id, 'read')
- r[f] = record.get(f, False)
- if r[f] and isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
- r[f] = len(r[f])
- result.append(r)
- if id in self.datas:
- self.datas[id]['internal.date_access'] = time.time()
- fields_post = filter(lambda x: x in self._columns and not getattr(self._columns[x], load), fields_to_read)
- for f in fields_post:
- res2 = self._columns[f].get_memory(cr, self, ids, f, user, context=context, values=result)
- for record in result:
- record[f] = res2[record['id']]
- if isinstance(ids_orig, (int, long)):
- return result[0]
- return result
-
- def write(self, cr, user, ids, vals, context=None):
- if not ids:
- return True
- vals2 = {}
- upd_todo = []
- for field in vals:
- if self._columns[field]._classic_write:
- vals2[field] = vals[field]
- else:
- upd_todo.append(field)
- for object_id in ids:
- self._check_access(user, object_id, mode='write')
- self.datas[object_id].update(vals2)
- self.datas[object_id]['internal.date_access'] = time.time()
- for field in upd_todo:
- self._columns[field].set_memory(cr, self, object_id, field, vals[field], user, context)
- self._validate(cr, user, [object_id], context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_write(user, self._name, object_id, cr)
- return object_id
-
- def create(self, cr, user, vals, context=None):
- self.vaccum(cr, user)
- self.next_id += 1
- id_new = self.next_id
-
- vals = self._add_missing_default_values(cr, user, vals, context)
-
- vals2 = {}
- upd_todo = []
- for field in vals:
- if self._columns[field]._classic_write:
- vals2[field] = vals[field]
- else:
- upd_todo.append(field)
- self.datas[id_new] = vals2
- self.datas[id_new]['internal.date_access'] = time.time()
- self.datas[id_new]['internal.create_uid'] = user
-
- for field in upd_todo:
- self._columns[field].set_memory(cr, self, id_new, field, vals[field], user, context)
- self._validate(cr, user, [id_new], context)
- if self._log_create and not (context and context.get('no_store_function', False)):
- message = self._description + \
- " '" + \
- self.name_get(cr, user, [id_new], context=context)[0][1] + \
- "' "+ _("created.")
- self.log(cr, user, id_new, message, True, context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_create(user, self._name, id_new, cr)
- return id_new
-
- def _where_calc(self, cr, user, args, active_test=True, context=None):
- if not context:
- context = {}
- args = args[:]
- res = []
- # if the object has a field named 'active', filter out all inactive
- # records unless they were explicitely asked for
- if 'active' in self._columns and (active_test and context.get('active_test', True)):
- if args:
- active_in_args = False
- for a in args:
- if a[0] == 'active':
- active_in_args = True
- if not active_in_args:
- args.insert(0, ('active', '=', 1))
- else:
- args = [('active', '=', 1)]
- if args:
- import expression
- e = expression.expression(cr, user, args, self, context)
- res = e.exp
- return res or []
-
- def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
- if not context:
- context = {}
-
- # implicit filter on current user except for superuser
- if user != 1:
- if not args:
- args = []
- args.insert(0, ('internal.create_uid', '=', user))
-
- result = self._where_calc(cr, user, args, context=context)
- if result == []:
- return self.datas.keys()
-
- res = []
- counter = 0
- #Find the value of dict
- f = False
- if result:
- for id, data in self.datas.items():
- counter = counter + 1
- data['id'] = id
- if limit and (counter > int(limit)):
- break
- f = True
- for arg in result:
- if len(arg) != 3:
- # Amazing hack: orm_memory handles only simple domains.
- continue
- if arg[1] == '=':
- val = eval('data[arg[0]]'+'==' +' arg[2]', locals())
- elif arg[1] in ['<', '>', 'in', 'not in', '<=', '>=', '<>']:
- val = eval('data[arg[0]]'+arg[1] +' arg[2]', locals())
- elif arg[1] in ['ilike']:
- val = (str(data[arg[0]]).find(str(arg[2]))!=-1)
-
- f = f and val
-
- if f:
- res.append(id)
- if count:
- return len(res)
- return res or []
-
- def unlink(self, cr, uid, ids, context=None):
- for id in ids:
- self._check_access(uid, id, 'unlink')
- self.datas.pop(id, None)
- if len(ids):
- cr.execute('delete from wkf_instance where res_type=%s and res_id IN %s', (self._name, tuple(ids)))
- return True
-
- def perm_read(self, cr, user, ids, context=None, details=True):
- result = []
- credentials = self.pool.get('res.users').name_get(cr, user, [user])[0]
- create_date = time.strftime('%Y-%m-%d %H:%M:%S')
- for id in ids:
- self._check_access(user, id, 'read')
- result.append({
- 'create_uid': credentials,
- 'create_date': create_date,
- 'write_uid': False,
- 'write_date': False,
- 'id': id,
- 'xmlid' : False,
- })
- return result
-
- def _check_removed_columns(self, cr, log=False):
- # nothing to check in memory...
- pass
-
- def exists(self, cr, uid, ids, context=None):
- if isinstance(ids, (long,int)):
- ids = [ids]
- return [id for id in ids if id in self.datas]
-
- def check_access_rule(self, cr, uid, ids, operation, context=None):
- # ir.rules do not currently apply for orm.memory instances,
- # only the implicit visibility=owner one.
- for id in ids:
- self._check_access(uid, id, operation)
-
-# Definition of log access columns, automatically added to models if
-# self._log_access is True
-LOG_ACCESS_COLUMNS = {
- 'create_uid': 'INTEGER REFERENCES res_users ON DELETE SET NULL',
- 'create_date': 'TIMESTAMP',
- 'write_uid': 'INTEGER REFERENCES res_users ON DELETE SET NULL',
- 'write_date': 'TIMESTAMP'
-}
-# special columns automatically created by the ORM
-MAGIC_COLUMNS = ['id'] + LOG_ACCESS_COLUMNS.keys() + \
- ['internal.create_uid', 'internal.date_access'] # for osv_memory only
-
-class orm(orm_template):
- _sql_constraints = []
- _table = None
- _protected = ['read', 'write', 'create', 'default_get', 'perm_read', 'unlink', 'fields_get', 'fields_view_get', 'search', 'name_get', 'distinct_field_get', 'name_search', 'copy', 'import_data', 'search_count', 'exists']
- __logger = logging.getLogger('orm')
- __schema = logging.getLogger('orm.schema')
-
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
"""
Get the list of records in list view grouped by the given ``groupby`` fields
@@ -2609,7 +2315,7 @@ class orm(orm_template):
"""
context = context or {}
- self.pool.get('ir.model.access').check(cr, uid, self._name, 'read')
+ self.check_read(cr, uid)
if not fields:
fields = self._columns.keys()
@@ -2773,7 +2479,7 @@ class orm(orm_template):
while ids_lst:
iids = ids_lst[:40]
ids_lst = ids_lst[40:]
- res = f.get(cr, self, iids, k, ROOT_USER_ID, {})
+ res = f.get(cr, self, iids, k, SUPERUSER_ID, {})
for key, val in res.items():
if f._multi:
val = val[k]
@@ -2828,6 +2534,25 @@ class orm(orm_template):
self.__schema.debug("Table '%s': column '%s': dropped NOT NULL constraint",
self._table, column['attname'])
+ # checked version: for direct m2o starting from `self`
+ def _m2o_add_foreign_key_checked(self, source_field, dest_model, ondelete):
+ assert self.is_transient() or not dest_model.is_transient(), \
+ 'Many2One relationships from non-transient Model to TransientModel are forbidden'
+ if self.is_transient() and not dest_model.is_transient():
+ # TransientModel relationships to regular Models are annoying
+ # usually because they could block deletion due to the FKs.
+ # So unless stated otherwise we default them to ondelete=cascade.
+ ondelete = ondelete or 'cascade'
+ self._foreign_keys.append((self._table, source_field, dest_model._table, ondelete or 'set null'))
+ self.__schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
+ self._table, source_field, dest_model._table, ondelete)
+
+ # unchecked version: for custom cases, such as m2m relationships
+ def _m2o_add_foreign_key_unchecked(self, source_table, source_field, dest_model, ondelete):
+ self._foreign_keys.append((source_table, source_field, dest_model._table, ondelete or 'set null'))
+ self.__schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
+ source_table, source_field, dest_model._table, ondelete)
+
def _auto_init(self, cr, context=None):
"""
@@ -2979,7 +2704,7 @@ class orm(orm_template):
# set the field to the default value if any
if k in self._defaults:
if callable(self._defaults[k]):
- default = self._defaults[k](self, cr, ROOT_USER_ID, context)
+ default = self._defaults[k](self, cr, SUPERUSER_ID, context)
else:
default = self._defaults[k]
@@ -3026,7 +2751,8 @@ class orm(orm_template):
self.__schema.debug(msg, self._table, k, f._type)
if isinstance(f, fields.many2one):
- ref = self.pool.get(f._obj)._table
+ dest_model = self.pool.get(f._obj)
+ ref = dest_model._table
if ref != 'ir_actions':
cr.execute('SELECT confdeltype, conname FROM pg_constraint as con, pg_class as cl1, pg_class as cl2, '
'pg_attribute as att1, pg_attribute as att2 '
@@ -3045,9 +2771,9 @@ class orm(orm_template):
"AND con.contype = 'f'", (self._table, ref, k, 'id'))
res2 = cr.dictfetchall()
if res2:
- if res2[0]['confdeltype'] != POSTGRES_CONFDELTYPES.get(f.ondelete.upper(), 'a'):
+ if res2[0]['confdeltype'] != POSTGRES_CONFDELTYPES.get((f.ondelete or 'set null').upper(), 'a'):
cr.execute('ALTER TABLE "' + self._table + '" DROP CONSTRAINT "' + res2[0]['conname'] + '"')
- self._foreign_keys.append((self._table, k, ref, f.ondelete))
+ self._m2o_add_foreign_key_checked(k, dest_model, f.ondelete)
cr.commit()
self.__schema.debug("Table '%s': column '%s': XXX",
self._table, k)
@@ -3064,7 +2790,7 @@ class orm(orm_template):
# initialize it
if not create and k in self._defaults:
if callable(self._defaults[k]):
- default = self._defaults[k](self, cr, ROOT_USER_ID, context)
+ default = self._defaults[k](self, cr, SUPERUSER_ID, context)
else:
default = self._defaults[k]
@@ -3085,12 +2811,11 @@ class orm(orm_template):
if isinstance(f, fields.many2one):
if not self.pool.get(f._obj):
raise except_orm('Programming Error', ('There is no reference available for %s') % (f._obj,))
- ref = self.pool.get(f._obj)._table
+ dest_model = self.pool.get(f._obj)
+ ref = dest_model._table
# ir_actions is inherited so foreign key doesn't work on it
if ref != 'ir_actions':
- self._foreign_keys.append((self._table, k, ref, f.ondelete))
- self.__schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
- self._table, k, ref, f.ondelete)
+ self._m2o_add_foreign_key_checked(k, dest_model, f.ondelete)
if f.select:
cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (self._table, k, self._table, k))
if f.required:
@@ -3212,20 +2937,28 @@ class orm(orm_template):
def _m2m_raise_or_create_relation(self, cr, f):
- cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (f._rel,))
+ m2m_tbl, col1, col2 = f._sql_names(self)
+ cr.execute("SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname=%s", (m2m_tbl,))
if not cr.dictfetchall():
if not self.pool.get(f._obj):
- raise except_orm('Programming Error', ('There is no reference available for %s') % (f._obj,))
- ref = self.pool.get(f._obj)._table
- cr.execute('CREATE TABLE "%s" ("%s" INTEGER NOT NULL, "%s" INTEGER NOT NULL, UNIQUE("%s","%s")) WITH OIDS' % (f._rel, f._id1, f._id2, f._id1, f._id2))
- self._foreign_keys.append((f._rel, f._id1, self._table, 'CASCADE'))
- self._foreign_keys.append((f._rel, f._id2, ref, 'CASCADE'))
- cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id1, f._rel, f._id1))
- cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (f._rel, f._id2, f._rel, f._id2))
- cr.execute("COMMENT ON TABLE \"%s\" IS 'RELATION BETWEEN %s AND %s'" % (f._rel, self._table, ref))
+ raise except_orm('Programming Error', ('Many2Many destination model does not exist: `%s`') % (f._obj,))
+ dest_model = self.pool.get(f._obj)
+ ref = dest_model._table
+ cr.execute('CREATE TABLE "%s" ("%s" INTEGER NOT NULL, "%s" INTEGER NOT NULL, UNIQUE("%s","%s")) WITH OIDS' % (m2m_tbl, col1, col2, col1, col2))
+
+ # create foreign key references with ondelete=cascade, unless the targets are SQL views
+ cr.execute("SELECT relkind FROM pg_class WHERE relkind IN ('v') AND relname=%s", (ref,))
+ if not cr.fetchall():
+ self._m2o_add_foreign_key_unchecked(m2m_tbl, col2, dest_model, 'cascade')
+ cr.execute("SELECT relkind FROM pg_class WHERE relkind IN ('v') AND relname=%s", (self._table,))
+ if not cr.fetchall():
+ self._m2o_add_foreign_key_unchecked(m2m_tbl, col1, self, 'cascade')
+
+ cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (m2m_tbl, col1, m2m_tbl, col1))
+ cr.execute('CREATE INDEX "%s_%s_index" ON "%s" ("%s")' % (m2m_tbl, col2, m2m_tbl, col2))
+ cr.execute("COMMENT ON TABLE \"%s\" IS 'RELATION BETWEEN %s AND %s'" % (m2m_tbl, self._table, ref))
cr.commit()
- self.__schema.debug("Create table '%s': relation between '%s' and '%s'",
- f._rel, self._table, ref)
+ self.__schema.debug("Create table '%s': m2m relation between '%s' and '%s'", m2m_tbl, self._table, ref)
def _add_sql_constraints(self, cr):
@@ -3293,109 +3026,6 @@ class orm(orm_template):
cr.execute(line2)
cr.commit()
-
- @classmethod
- def createInstance(cls, pool, cr):
- return cls.makeInstance(pool, cr, ['_columns', '_defaults',
- '_inherits', '_constraints', '_sql_constraints'])
-
- def __init__(self, pool, cr):
- """
-
- - copy the stored fields' functions in the osv_pool,
- - update the _columns with the fields found in ir_model_fields,
- - ensure there is a many2one for each _inherits'd parent,
- - update the children's _columns,
- - give a chance to each field to initialize itself.
-
- """
- super(orm, self).__init__(pool, cr)
-
- if not hasattr(self, '_log_access'):
- # if not access is not specify, it is the same value as _auto
- self._log_access = getattr(self, "_auto", True)
-
- self._columns = self._columns.copy()
- for store_field in self._columns:
- f = self._columns[store_field]
- if hasattr(f, 'digits_change'):
- f.digits_change(cr)
- if not isinstance(f, fields.function):
- continue
- if not f.store:
- continue
- if self._columns[store_field].store is True:
- sm = {self._name: (lambda self, cr, uid, ids, c={}: ids, None, 10, None)}
- else:
- sm = self._columns[store_field].store
- for object, aa in sm.items():
- if len(aa) == 4:
- (fnct, fields2, order, length) = aa
- elif len(aa) == 3:
- (fnct, fields2, order) = aa
- length = None
- else:
- raise except_orm('Error',
- ('Invalid function definition %s in object %s !\nYou must use the definition: store={object:(fnct, fields, priority, time length)}.' % (store_field, self._name)))
- self.pool._store_function.setdefault(object, [])
- ok = True
- for x, y, z, e, f, l in self.pool._store_function[object]:
- if (x==self._name) and (y==store_field) and (e==fields2):
- if f == order:
- ok = False
- if ok:
- self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length))
- self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
-
- for (key, _, msg) in self._sql_constraints:
- self.pool._sql_error[self._table+'_'+key] = msg
-
- # Load manual fields
-
- cr.execute("SELECT id FROM ir_model_fields WHERE name=%s AND model=%s", ('state', 'ir.model.fields'))
- if cr.fetchone():
- cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))
- for field in cr.dictfetchall():
- if field['name'] in self._columns:
- continue
- attrs = {
- 'string': field['field_description'],
- 'required': bool(field['required']),
- 'readonly': bool(field['readonly']),
- 'domain': eval(field['domain']) if field['domain'] else None,
- 'size': field['size'],
- 'ondelete': field['on_delete'],
- 'translate': (field['translate']),
- 'manual': True,
- #'select': int(field['select_level'])
- }
-
- if field['ttype'] == 'selection':
- self._columns[field['name']] = fields.selection(eval(field['selection']), **attrs)
- elif field['ttype'] == 'reference':
- self._columns[field['name']] = fields.reference(selection=eval(field['selection']), **attrs)
- elif field['ttype'] == 'many2one':
- self._columns[field['name']] = fields.many2one(field['relation'], **attrs)
- elif field['ttype'] == 'one2many':
- self._columns[field['name']] = fields.one2many(field['relation'], field['relation_field'], **attrs)
- elif field['ttype'] == 'many2many':
- _rel1 = field['relation'].replace('.', '_')
- _rel2 = field['model'].replace('.', '_')
- _rel_name = 'x_%s_%s_%s_rel' % (_rel1, _rel2, field['name'])
- self._columns[field['name']] = fields.many2many(field['relation'], _rel_name, 'id1', 'id2', **attrs)
- else:
- self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs)
- self._inherits_check()
- self._inherits_reload()
- if not self._sequence:
- self._sequence = self._table + '_id_seq'
- for k in self._defaults:
- assert (k in self._columns) or (k in self._inherit_fields), 'Default function defined in %s but field %s does not exist !' % (self._name, k,)
- for f in self._columns:
- self._columns[f].restart()
-
- __init__.__doc__ = orm_template.__init__.__doc__ + __init__.__doc__
-
#
# Update objects that uses this one to update their _inherits fields
#
@@ -3474,9 +3104,12 @@ class orm(orm_template):
# return _proxy
- def fields_get(self, cr, user, fields=None, context=None):
- """
- Get the description of list of fields
+ def fields_get(self, cr, user, allfields=None, context=None, write_access=True):
+ """ Return the definition of each field.
+
+ The returned value is a dictionary (indiced by field name) of
+ dictionaries. The _inherits'd fields are included. The string, help,
+ and selection (if present) attributes are translated.
:param cr: database cursor
:param user: current user id
@@ -3486,15 +3119,74 @@ class orm(orm_template):
:raise AccessError: * if user has no create/write rights on the requested object
"""
- ira = self.pool.get('ir.model.access')
- write_access = ira.check(cr, user, self._name, 'write', False) or \
- ira.check(cr, user, self._name, 'create', False)
- return super(orm, self).fields_get(cr, user, fields, context, write_access)
+ if context is None:
+ context = {}
+
+ write_access = self.check_write(cr, user, False) or \
+ self.check_create(cr, user, False)
+
+ res = {}
+
+ translation_obj = self.pool.get('ir.translation')
+ for parent in self._inherits:
+ res.update(self.pool.get(parent).fields_get(cr, user, allfields, context))
+
+ for f, field in self._columns.iteritems():
+ if allfields and f not in allfields:
+ continue
+
+ res[f] = fields.field_to_dict(self, cr, user, context, field)
+
+ if not write_access:
+ res[f]['readonly'] = True
+ res[f]['states'] = {}
+
+ if 'string' in res[f]:
+ res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context.get('lang', False) or 'en_US')
+ if res_trans:
+ res[f]['string'] = res_trans
+ if 'help' in res[f]:
+ help_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'help', context.get('lang', False) or 'en_US')
+ if help_trans:
+ res[f]['help'] = help_trans
+ if 'selection' in res[f]:
+ if isinstance(field.selection, (tuple, list)):
+ sel = field.selection
+ sel2 = []
+ for key, val in sel:
+ val2 = None
+ if val:
+ val2 = translation_obj._get_source(cr, user, self._name + ',' + f, 'selection', context.get('lang', False) or 'en_US', val)
+ sel2.append((key, val2 or val))
+ res[f]['selection'] = sel2
+
+ return res
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
+ """ Read records with given ids with the given fields
+
+ :param cr: database cursor
+ :param user: current user id
+ :param ids: id or list of the ids of the records to read
+ :param fields: optional list of field names to return (default: all fields would be returned)
+ :type fields: list (example ['field_name_1', ...])
+ :param context: optional context dictionary - it may contains keys for specifying certain options
+ like ``context_lang``, ``context_tz`` to alter the results of the call.
+ A special ``bin_size`` boolean flag may also be passed in the context to request the
+ value of all fields.binary columns to be returned as the size of the binary instead of its
+ contents. This can also be selectively overriden by passing a field-specific flag
+ in the form ``bin_size_XXX: True/False`` where ``XXX`` is the name of the field.
+ Note: The ``bin_size_XXX`` form is new in OpenERP v6.0.
+ :return: list of dictionaries((dictionary per record asked)) with requested field values
+ :rtype: [{‘name_of_the_field’: value, ...}, ...]
+ :raise AccessError: * if user has no read rights on the requested object
+ * if user tries to bypass access rules for read on the requested object
+
+ """
+
if not context:
context = {}
- self.pool.get('ir.model.access').check(cr, user, self._name, 'read')
+ self.check_read(cr, user)
if not fields:
fields = list(set(self._columns.keys() + self._inherit_fields.keys()))
if isinstance(ids, (int, long)):
@@ -3668,6 +3360,7 @@ class orm(orm_template):
vals[field] = False
return res
+ # TODO check READ access
def perm_read(self, cr, user, ids, context=None, details=True):
"""
Returns some metadata about the given records.
@@ -3737,6 +3430,23 @@ class orm(orm_template):
# mention the first one only to keep the error message readable
raise except_orm('ConcurrencyException', _('A document was modified since you last viewed it (%s:%d)') % (self._description, res[0]))
+ def check_access_rights(self, cr, uid, operation, raise_exception=True): # no context on purpose.
+ """Verifies that the operation given by ``operation`` is allowed for the user
+ according to the access rights."""
+ return self.pool.get('ir.model.access').check(cr, uid, self._name, operation, raise_exception)
+
+ def check_create(self, cr, uid, raise_exception=True):
+ return self.check_access_rights(cr, uid, 'create', raise_exception)
+
+ def check_read(self, cr, uid, raise_exception=True):
+ return self.check_access_rights(cr, uid, 'read', raise_exception)
+
+ def check_unlink(self, cr, uid, raise_exception=True):
+ return self.check_access_rights(cr, uid, 'unlink', raise_exception)
+
+ def check_write(self, cr, uid, raise_exception=True):
+ return self.check_access_rights(cr, uid, 'write', raise_exception)
+
def check_access_rule(self, cr, uid, ids, operation, context=None):
"""Verifies that the operation given by ``operation`` is allowed for the user
according to ir.rules.
@@ -3745,17 +3455,35 @@ class orm(orm_template):
:raise except_orm: * if current ir.rules do not permit this operation.
:return: None if the operation is allowed
"""
- where_clause, where_params, tables = self.pool.get('ir.rule').domain_get(cr, uid, self._name, operation, context=context)
- if where_clause:
- where_clause = ' and ' + ' and '.join(where_clause)
- for sub_ids in cr.split_for_in_conditions(ids):
- cr.execute('SELECT ' + self._table + '.id FROM ' + ','.join(tables) +
- ' WHERE ' + self._table + '.id IN %s' + where_clause,
- [sub_ids] + where_params)
- if cr.rowcount != len(sub_ids):
- raise except_orm(_('AccessError'),
- _('Operation prohibited by access rules, or performed on an already deleted document (Operation: %s, Document type: %s).')
- % (operation, self._description))
+ if uid == SUPERUSER_ID:
+ return
+
+ if self.is_transient:
+ # Only one single implicit access rule for transient models: owner only!
+ # This is ok to hardcode because we assert that TransientModels always
+ # have log_access enabled and this the create_uid column is always there.
+ # And even with _inherits, these fields are always present in the local
+ # table too, so no need for JOINs.
+ cr.execute("""SELECT distinct create_uid
+ FROM %s
+ WHERE id IN %%s""" % self._table, (tuple(ids),))
+ uids = [x[0] for x in cr.fetchall()]
+ if len(uids) != 1 or uids[0] != uid:
+ raise orm.except_orm(_('AccessError'), '%s access is '
+ 'restricted to your own records for transient models '
+ '(except for the super-user).' % operation.capitalize())
+ else:
+ where_clause, where_params, tables = self.pool.get('ir.rule').domain_get(cr, uid, self._name, operation, context=context)
+ if where_clause:
+ where_clause = ' and ' + ' and '.join(where_clause)
+ for sub_ids in cr.split_for_in_conditions(ids):
+ cr.execute('SELECT ' + self._table + '.id FROM ' + ','.join(tables) +
+ ' WHERE ' + self._table + '.id IN %s' + where_clause,
+ [sub_ids] + where_params)
+ if cr.rowcount != len(sub_ids):
+ raise except_orm(_('AccessError'),
+ _('Operation prohibited by access rules, or performed on an already deleted document (Operation: %s, Document type: %s).')
+ % (operation, self._description))
def unlink(self, cr, uid, ids, context=None):
"""
@@ -3780,7 +3508,7 @@ class orm(orm_template):
self._check_concurrency(cr, ids, context)
- self.pool.get('ir.model.access').check(cr, uid, self._name, 'unlink')
+ self.check_unlink(cr, uid)
properties = self.pool.get('ir.property')
domain = [('res_id', '=', False),
@@ -3806,10 +3534,10 @@ class orm(orm_template):
# Note: following steps performed as admin to avoid access rights restrictions, and with no context
# to avoid possible side-effects during admin calls.
# Step 1. Calling unlink of ir_model_data only for the affected IDS
- reference_ids = pool_model_data.search(cr, ROOT_USER_ID, [('res_id','in',list(sub_ids)),('model','=',self._name)])
+ reference_ids = pool_model_data.search(cr, SUPERUSER_ID, [('res_id','in',list(sub_ids)),('model','=',self._name)])
# Step 2. Marching towards the real deletion of referenced records
if reference_ids:
- pool_model_data.unlink(cr, ROOT_USER_ID, reference_ids)
+ pool_model_data.unlink(cr, SUPERUSER_ID, reference_ids)
# For the same reason, removing the record relevant to ir_values
ir_value_ids = ir_values_obj.search(cr, uid,
@@ -3917,7 +3645,7 @@ class orm(orm_template):
ids = [ids]
self._check_concurrency(cr, ids, context)
- self.pool.get('ir.model.access').check(cr, user, self._name, 'write')
+ self.check_write(cr, user)
result = self._store_get_values(cr, user, ids, vals.keys(), context) or []
@@ -4126,7 +3854,11 @@ class orm(orm_template):
"""
if not context:
context = {}
- self.pool.get('ir.model.access').check(cr, user, self._name, 'create')
+
+ if self.is_transient():
+ self._transient_vacuum(cr, user)
+
+ self.check_create(cr, user)
vals = self._add_missing_default_values(cr, user, vals, context)
@@ -4279,6 +4011,27 @@ class orm(orm_template):
wf_service.trg_create(user, self._name, id_new, cr)
return id_new
+ def browse(self, cr, uid, select, context=None, list_class=None, fields_process=None):
+ """Fetch records as objects allowing to use dot notation to browse fields and relations
+
+ :param cr: database cursor
+ :param user: current user id
+ :param select: id or list of ids.
+ :param context: context arguments, like lang, time zone
+ :rtype: object or list of objects requested
+
+ """
+ self._list_class = list_class or browse_record_list
+ cache = {}
+ # need to accepts ints and longs because ids coming from a method
+ # launched by button in the interface have a type long...
+ if isinstance(select, (int, long)):
+ return browse_record(cr, uid, select, self, cache, context=context, list_class=self._list_class, fields_process=fields_process)
+ elif isinstance(select, list):
+ return self._list_class([browse_record(cr, uid, id, self, cache, context=context, list_class=self._list_class, fields_process=fields_process) for id in select], context=context)
+ else:
+ return browse_null()
+
def _store_get_values(self, cr, uid, ids, fields, context):
"""Returns an ordered list of fields.functions to call due to
an update operation on ``fields`` of records with ``ids``,
@@ -4301,7 +4054,7 @@ class orm(orm_template):
mapping = {}
for function in to_compute:
# use admin user for accessing objects having rules defined on store fields
- target_ids = [id for id in function[id_mapping_fnct_](self, cr, ROOT_USER_ID, ids, context) if id]
+ target_ids = [id for id in function[id_mapping_fnct_](self, cr, SUPERUSER_ID, ids, context) if id]
# the compound key must consider the priority and model name
key = (function[priority_], function[model_name_])
@@ -4368,7 +4121,7 @@ class orm(orm_template):
val = todo[key]
if key:
# use admin user for accessing objects having rules defined on store fields
- result = self._columns[val[0]].get(cr, self, ids, val, ROOT_USER_ID, context=context)
+ result = self._columns[val[0]].get(cr, self, ids, val, SUPERUSER_ID, context=context)
for id, value in result.items():
if field_flag:
for f in value.keys():
@@ -4394,7 +4147,7 @@ class orm(orm_template):
else:
for f in val:
# use admin user for accessing objects having rules defined on store fields
- result = self._columns[f].get(cr, self, ids, f, ROOT_USER_ID, context=context)
+ result = self._columns[f].get(cr, self, ids, f, SUPERUSER_ID, context=context)
for r in result.keys():
if field_flag:
if r in field_dict.keys():
@@ -4443,7 +4196,6 @@ class orm(orm_template):
domain = [('active', '=', 1)]
if domain:
- import expression
e = expression.expression(cr, user, domain, self, context)
tables = e.get_tables()
where_clause, where_params = e.to_sql()
@@ -4589,7 +4341,11 @@ class orm(orm_template):
"""
if context is None:
context = {}
- self.pool.get('ir.model.access').check(cr, access_rights_uid or user, self._name, 'read')
+ self.check_read(cr, access_rights_uid or user)
+
+ # For transient models, restrict acces to the current user, except for the super-user
+ if self.is_transient() and self._log_access and user != SUPERUSER_ID:
+ args = expression.AND(([('create_uid', '=', user)], args or []))
query = self._where_calc(cr, user, args, context=context)
self._apply_ir_rules(cr, user, query, 'read', context=context)
@@ -4780,6 +4536,18 @@ class orm(orm_template):
return new_id
def exists(self, cr, uid, ids, context=None):
+ """Checks whether the given id or ids exist in this model,
+ and return the list of ids that do. This is simple to use for
+ a truth test on a browse_record::
+
+ if record.exists():
+ pass
+
+ :param ids: id or list of ids to check for existence
+ :type ids: int or [int]
+ :return: the list of ids that currently exist, out of
+ the given `ids`
+ """
if type(ids) in (int, long):
ids = [ids]
query = 'SELECT id FROM "%s"' % (self._table)
@@ -4864,5 +4632,98 @@ class orm(orm_template):
results[k] = ''
return results
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+ # Transience
+ def is_transient(self):
+ """ Return whether the model is transient.
+ See TransientModel.
+
+ """
+ return self._transient
+
+ def _transient_clean_rows_older_than(self, cr, seconds):
+ assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
+ cr.execute("SELECT id FROM " + self._table + " WHERE"
+ " COALESCE(write_date, create_date, now())::timestamp <"
+ " (now() - interval %s)", ("%s seconds" % seconds,))
+ ids = [x[0] for x in cr.fetchall()]
+ self.unlink(cr, SUPERUSER_ID, ids)
+
+ def _transient_clean_old_rows(self, cr, count):
+ assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
+ cr.execute(
+ "SELECT id, COALESCE(write_date, create_date, now())::timestamp"
+ " AS t FROM " + self._table +
+ " ORDER BY t LIMIT %s", (count,))
+ ids = [x[0] for x in cr.fetchall()]
+ self.unlink(cr, SUPERUSER_ID, ids)
+
+ def _transient_vacuum(self, cr, uid, force=False):
+ """Clean the transient records.
+
+ This unlinks old records from the transient model tables whenever the
+ "_transient_max_count" or "_max_age" conditions (if any) are reached.
+ Actual cleaning will happen only once every "_transient_check_time" calls.
+ This means this method can be called frequently called (e.g. whenever
+ a new record is created).
+ """
+ assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
+ self._transient_check_count += 1
+ if (not force) and (self._transient_check_count % self._transient_check_time):
+ self._transient_check_count = 0
+ return True
+
+ # Age-based expiration
+ if self._transient_max_hours:
+ self._transient_clean_rows_older_than(cr, self._transient_max_hours * 60 * 60)
+
+ # Count-based expiration
+ if self._transient_max_count:
+ self._transient_clean_old_rows(cr, self._transient_max_count)
+
+ return True
+
+# keep this import here, at top it will cause dependency cycle errors
+import expression
+
+class Model(BaseModel):
+ """Main super-class for regular database-persisted OpenERP models.
+
+ OpenERP models are created by inheriting from this class::
+
+ class user(Model):
+ ...
+
+ The system will later instantiate the class once per database (on
+ which the class' module is installed).
+ """
+ _register = False # not visible in ORM registry, meant to be python-inherited only
+ _transient = False # True in a TransientModel
+
+class TransientModel(BaseModel):
+ """Model super-class for transient records, meant to be temporarily
+ persisted, and regularly vaccuum-cleaned.
+
+ A TransientModel has a simplified access rights management,
+ all users can create new records, and may only access the
+ records they created. The super-user has unrestricted access
+ to all TransientModel records.
+ """
+ _register = False # not visible in ORM registry, meant to be python-inherited only
+ _transient = True
+
+class AbstractModel(BaseModel):
+ """Abstract Model super-class for creating an abstract class meant to be
+ inherited by regular models (Models or TransientModels) but not meant to
+ be usable on its own, or persisted.
+
+ Technical note: we don't want to make AbstractModel the super-class of
+ Model or BaseModel because it would not make sense to put the main
+ definition of persistence methods such as create() in it, and still we
+ should be able to override them within an AbstractModel.
+ """
+ _auto = False # don't create any database backend for AbstractModels
+ _register = False # not visible in ORM registry, meant to be python-inherited only
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/osv/osv.py b/openerp/osv/osv.py
index 02c6fbe3c5d..00672dd94bd 100644
--- a/openerp/osv/osv.py
+++ b/openerp/osv/osv.py
@@ -21,16 +21,17 @@
#.apidoc title: Objects Services (OSV)
+import logging
+from psycopg2 import IntegrityError, errorcodes
+
import orm
+import openerp
import openerp.netsvc as netsvc
import openerp.pooler as pooler
import openerp.sql_db as sql_db
-import logging
-from psycopg2 import IntegrityError, errorcodes
from openerp.tools.func import wraps
from openerp.tools.translate import translate
-from openerp.osv.orm import MetaModel
-
+from openerp.osv.orm import MetaModel, Model, TransientModel, AbstractModel
class except_osv(Exception):
def __init__(self, name, value, exc_type='warning'):
@@ -198,17 +199,10 @@ class object_proxy():
cr.close()
return res
-
-class osv_memory(orm.orm_memory):
- """ Deprecated class. """
- __metaclass__ = MetaModel
- _register = False # Set to false if the model shouldn't be automatically discovered.
-
-
-class osv(orm.orm):
- """ Deprecated class. """
- __metaclass__ = MetaModel
- _register = False # Set to false if the model shouldn't be automatically discovered.
+# deprecated - for backward compatibility.
+osv = Model
+osv_memory = TransientModel
+osv_abstract = AbstractModel # ;-)
def start_object_proxy():
diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py
index ce4354d2b67..bb4ce9db87d 100644
--- a/openerp/tools/yaml_import.py
+++ b/openerp/tools/yaml_import.py
@@ -307,7 +307,7 @@ class YamlInterpreter(object):
import openerp.osv as osv
record, fields = node.items()[0]
model = self.get_model(record.model)
- if isinstance(model, osv.osv.osv_memory):
+ if model.is_transient():
record_dict=self.create_osv_memory_record(record, fields)
else:
self.validate_xml_id(record.id)