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)