diff --git a/bin/addons/base/base_data.xml b/bin/addons/base/base_data.xml
index 710bddeb73d..c8d3e39dd22 100644
--- a/bin/addons/base/base_data.xml
+++ b/bin/addons/base/base_data.xml
@@ -1245,6 +1245,9 @@
Tiny sprl
+
+
+
diff --git a/bin/addons/base/base_update.xml b/bin/addons/base/base_update.xml
index 99ec3f7a250..93c33fd9a9d 100644
--- a/bin/addons/base/base_update.xml
+++ b/bin/addons/base/base_update.xml
@@ -76,13 +76,21 @@
diff --git a/bin/addons/base/i18n/it.po b/bin/addons/base/i18n/it.po
index 7e884dde2fa..5a78bf97695 100644
--- a/bin/addons/base/i18n/it.po
+++ b/bin/addons/base/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
-"PO-Revision-Date: 2009-12-30 06:21+0000\n"
+"PO-Revision-Date: 2010-01-10 09:01+0000\n"
"Last-Translator: Fabien (Open ERP) \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: 2009-12-31 04:57+0000\n"
+"X-Launchpad-Export-Date: 2010-01-11 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
@@ -175,7 +175,7 @@ msgstr "ir.report.custom.fields"
#. module: base
#: view:res.partner:0
msgid "Search Partner"
-msgstr ""
+msgstr "Ricerca Partner"
#. module: base
#: code:addons/base/module/wizard/wizard_export_lang.py:0
@@ -216,6 +216,8 @@ 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 ""
+"Salva questo documento come un file %s e modificalo con un software "
+"specifico o un editor di testo. La codifica del file è UTF-8."
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -233,6 +235,8 @@ msgstr "Le password non corrispondono !"
#, python-format
msgid "This url '%s' must provide an html file with links to zip modules"
msgstr ""
+"Questo indirizzo URL '%s' deve condurre ad un file html contenente "
+"collegamenti a diversi moduli in formato .zip."
#. module: base
#: selection:res.request,state:0
@@ -314,7 +318,7 @@ msgstr "Moduli non Installati"
#. module: base
#: selection:ir.actions.report.xml,report_type:0
msgid "txt"
-msgstr ""
+msgstr "txt"
#. module: base
#: wizard_view:server.action.create,init:0
@@ -361,6 +365,8 @@ msgid ""
"You can not remove the admin user as it is used internally for resources "
"created by OpenERP (updates, module installation, ...)"
msgstr ""
+"Non puoi rimuovere l'utente admin, poichè viene utilizzato internamente per "
+"risorse create da OpenERP (aggiornamenti, installazioni...)"
#. module: base
#: model:res.country,name:base.gf
@@ -370,7 +376,7 @@ msgstr "Guyana Francese"
#. module: base
#: field:ir.ui.view.custom,ref_id:0
msgid "Original View"
-msgstr ""
+msgstr "Vista originale"
#. module: base
#: selection:module.lang.install,init,lang:0
@@ -391,6 +397,7 @@ msgstr ""
#: help:res.lang,iso_code:0
msgid "This ISO code is the name of po files to use for translations"
msgstr ""
+"Questo codice ISO è il nome del file PO da utilizzare per le traduzioni"
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -589,7 +596,7 @@ msgstr ","
#. module: base
#: view:res.partner:0
msgid "My Partners"
-msgstr ""
+msgstr "Miei Partners"
#. module: base
#: model:res.country,name:base.es
@@ -736,13 +743,13 @@ msgstr "Isole Cayman"
#. module: base
#: model:res.country,name:base.ir
msgid "Iran"
-msgstr ""
+msgstr "Iran"
#. module: base
#: model:ir.actions.act_window,name:base.res_request-act
#: model:ir.ui.menu,name:base.menu_res_request_act
msgid "My Requests"
-msgstr ""
+msgstr "Le Mie Richieste"
#. module: base
#: field:ir.sequence,name:0
@@ -768,12 +775,12 @@ msgstr "Uganda"
#. module: base
#: model:res.country,name:base.ne
msgid "Niger"
-msgstr ""
+msgstr "Nigeria"
#. module: base
#: model:res.country,name:base.ba
msgid "Bosnia-Herzegovina"
-msgstr ""
+msgstr "Bosnia-Erzegovina"
#. module: base
#: field:ir.report.custom.fields,alignment:0
@@ -825,12 +832,12 @@ msgstr "Repository"
#. module: base
#: model:res.country,name:base.gs
msgid "S. Georgia & S. Sandwich Isls."
-msgstr ""
+msgstr "Isole di S. Georgia e S. Sandwich"
#. module: base
#: field:ir.actions.url,url:0
msgid "Action URL"
-msgstr ""
+msgstr "URL dell'azione"
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -840,12 +847,12 @@ msgstr "STOCK_JUSTIFY_FILL"
#. module: base
#: model:res.country,name:base.mh
msgid "Marshall Islands"
-msgstr ""
+msgstr "Isole Marshall"
#. module: base
#: model:res.country,name:base.ht
msgid "Haiti"
-msgstr ""
+msgstr "Haiti"
#. module: base
#: selection:ir.translation,type:0
@@ -855,13 +862,13 @@ msgstr "RML"
#. module: base
#: selection:ir.ui.view,type:0
msgid "Search"
-msgstr ""
+msgstr "Ricerca"
#. module: base
#: code:addons/base/ir/ir_report_custom.py:0
#, python-format
msgid "Pie charts need exactly two fields"
-msgstr ""
+msgstr "I Grafici a Torta necessitano di due campi"
#. module: base
#: help:wizard.module.lang.export,lang:0
@@ -871,7 +878,7 @@ msgstr "Per esportare una nuova lingua, non selezionare una lingua"
#. module: base
#: model:res.country,name:base.md
msgid "Moldavia"
-msgstr ""
+msgstr "Moldavia"
#. module: base
#: view:ir.module.module:0
@@ -928,6 +935,9 @@ msgid ""
"you select the invoice, then `object.invoice_address_id.email` is the field "
"which gives the correct address"
msgstr ""
+"Fornisce i campi che verranno usati per prelevare l'indirizzo e-mail, es. "
+"quando si seleziona una fattura. `object.invoice_address_id.email` è il "
+"campo che fornisce l'indirizzo corretto."
#. module: base
#: field:res.roles,name:0
@@ -947,7 +957,7 @@ msgstr "-"
#. module: base
#: field:res.payterm,name:0
msgid "Payment Term (short name)"
-msgstr ""
+msgstr "Termini di Pagamento (abbreviazione)"
#. module: base
#: model:ir.model,name:base.model_res_bank
@@ -1025,7 +1035,7 @@ msgstr "Cerca Nuovi Moduli"
#. module: base
#: model:res.country,name:base.km
msgid "Comoros"
-msgstr ""
+msgstr "Isole Comore"
#. module: base
#: model:ir.actions.act_window,name:base.action_server_action
@@ -1037,7 +1047,7 @@ msgstr "Azioni Server"
#. module: base
#: model:res.country,name:base.tp
msgid "East Timor"
-msgstr ""
+msgstr "Timor Est"
#. module: base
#: view:ir.rule:0
@@ -1052,7 +1062,7 @@ msgstr "Precisione di Calcolo"
#. module: base
#: model:res.country,name:base.kg
msgid "Kyrgyz Republic (Kyrgyzstan)"
-msgstr ""
+msgstr "Kyrgyzstan"
#. module: base
#: model:ir.model,name:base.model_wizard_ir_model_menu_create_line
@@ -1068,7 +1078,7 @@ msgstr "Giorno: %(day)s"
#: code:addons/base/ir/ir_model.py:0
#, python-format
msgid "You can not read this document! (%s)"
-msgstr ""
+msgstr "Non puoi leggere questo documento ! (%s)"
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -1078,7 +1088,7 @@ msgstr "STOCK_FIND_AND_REPLACE"
#. module: base
#: model:res.country,name:base.mv
msgid "Maldives"
-msgstr ""
+msgstr "Maldive"
#. module: base
#: help:ir.values,res_id:0
diff --git a/bin/addons/base/i18n/pt_BR.po b/bin/addons/base/i18n/pt_BR.po
index 02bcf6d1efa..2a2c7a1034b 100644
--- a/bin/addons/base/i18n/pt_BR.po
+++ b/bin/addons/base/i18n/pt_BR.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
-"PO-Revision-Date: 2009-12-31 05:55+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-01-11 17:26+0000\n"
+"Last-Translator: Luiz Fernando M.França \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: 2010-01-01 05:01+0000\n"
+"X-Launchpad-Export-Date: 2010-01-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
@@ -605,7 +605,7 @@ msgstr "Espanha"
#: wizard_view:module.upgrade,end:0
#: wizard_view:module.upgrade,start:0
msgid "You may have to reinstall some language pack."
-msgstr "Voce pode ter que reinstalar alguns pacoites de idioma."
+msgstr "Voce pode ter que reinstalar alguns pacotes de idioma."
#. module: base
#: field:res.partner.address,mobile:0
diff --git a/bin/addons/base/i18n/uk.po b/bin/addons/base/i18n/uk.po
index c7644bb473f..e94db3c984e 100644
--- a/bin/addons/base/i18n/uk.po
+++ b/bin/addons/base/i18n/uk.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
-"PO-Revision-Date: 2010-01-04 06:01+0000\n"
+"PO-Revision-Date: 2010-01-11 06:03+0000\n"
"Last-Translator: Fabien (Open ERP) \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: 2010-01-05 04:40+0000\n"
+"X-Launchpad-Export-Date: 2010-01-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
diff --git a/bin/addons/base/i18n/zh_CN.po b/bin/addons/base/i18n/zh_CN.po
index 86f271f40a3..56f88a33fb4 100644
--- a/bin/addons/base/i18n/zh_CN.po
+++ b/bin/addons/base/i18n/zh_CN.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-12-18 08:39+0000\n"
-"PO-Revision-Date: 2009-12-27 06:10+0000\n"
+"PO-Revision-Date: 2010-01-10 09:34+0000\n"
"Last-Translator: Wei \"oldrev\" Li \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: 2009-12-29 04:35+0000\n"
+"X-Launchpad-Export-Date: 2010-01-11 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base
@@ -172,7 +172,7 @@ msgstr "ir.report.custom.fields"
#. module: base
#: view:res.partner:0
msgid "Search Partner"
-msgstr ""
+msgstr "搜索业务伙伴"
#. module: base
#: code:addons/base/module/wizard/wizard_export_lang.py:0
@@ -310,7 +310,7 @@ msgstr "已卸载的模块"
#. module: base
#: selection:ir.actions.report.xml,report_type:0
msgid "txt"
-msgstr ""
+msgstr "txt"
#. module: base
#: wizard_view:server.action.create,init:0
@@ -383,7 +383,7 @@ msgstr "如果您选中此处,当下次用户使用相同的附件名称打印
#. module: base
#: help:res.lang,iso_code:0
msgid "This ISO code is the name of po files to use for translations"
-msgstr ""
+msgstr ".PO 文件翻译使用的 ISO 国家代码"
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -582,7 +582,7 @@ msgstr ","
#. module: base
#: view:res.partner:0
msgid "My Partners"
-msgstr ""
+msgstr "我的业务伙伴列表"
#. module: base
#: model:res.country,name:base.es
@@ -733,7 +733,7 @@ msgstr "伊朗"
#: model:ir.actions.act_window,name:base.res_request-act
#: model:ir.ui.menu,name:base.menu_res_request_act
msgid "My Requests"
-msgstr ""
+msgstr "我的请求列表"
#. module: base
#: field:ir.sequence,name:0
@@ -843,7 +843,7 @@ msgstr "RML"
#. module: base
#: selection:ir.ui.view,type:0
msgid "Search"
-msgstr ""
+msgstr "搜索"
#. module: base
#: code:addons/base/ir/ir_report_custom.py:0
@@ -974,7 +974,7 @@ msgstr "默认价值"
#: wizard_field:res.partner.sms_send,init,user:0
#: field:res.users,login:0
msgid "Login"
-msgstr "登录"
+msgstr "用户名"
#. module: base
#: view:maintenance.contract:0
@@ -991,7 +991,7 @@ msgstr "STOCK_COPY"
#: code:addons/base/ir/ir_model.py:0
#, python-format
msgid "Model %s Does not Exist !"
-msgstr ""
+msgstr "模型 %s 不存在!"
#. module: base
#: code:addons/base/module/module.py:0
@@ -1000,6 +1000,8 @@ msgid ""
"You try to install the module '%s' that depends on the module:'%s'.\n"
"But this module is not available in your system."
msgstr ""
+"您试图安装模块'%s'.这模块依赖模块: %s。\n"
+"但您的系统中该模块不可用。"
#. module: base
#: model:ir.model,name:base.model_res_request_link
@@ -1119,7 +1121,7 @@ msgstr "自定义报表"
#: code:addons/base/res/res_user.py:0
#, python-format
msgid " (copy)"
-msgstr ""
+msgstr " (副本)"
#. module: base
#: view:ir.sequence:0
@@ -1134,7 +1136,7 @@ msgstr "7. %H:%M:%S ==> 18:25:20"
#. module: base
#: help:res.users,company_id:0
msgid "The company this user is currently working on."
-msgstr ""
+msgstr "该用户当前工作的公司。"
#. module: base
#: help:ir.actions.server,message:0
@@ -1280,7 +1282,7 @@ msgstr "STOCK_PROPERTIES"
#. module: base
#: view:res.partner.address:0
msgid "Search Contact"
-msgstr ""
+msgstr "搜索联系人"
#. module: base
#: view:ir.module.module:0
@@ -1344,7 +1346,7 @@ msgstr "组"
#. module: base
#: constraint:res.users:0
msgid "This user can not connect using this company !"
-msgstr ""
+msgstr "该用户不能使用该公司连接。"
#. module: base
#: model:res.country,name:base.bz
@@ -1455,7 +1457,7 @@ msgstr "当前汇率"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "Greek / Ελληνικά"
-msgstr ""
+msgstr "希腊语 / Ελληνικά"
#. module: base
#: view:ir.values:0
@@ -1533,7 +1535,7 @@ msgstr "电子邮件地址"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "French (BE) / Français (BE)"
-msgstr ""
+msgstr "法语(比利时)/ Français (BE)"
#. module: base
#: code:addons/base/ir/ir_model.py:0
@@ -1571,7 +1573,7 @@ msgstr "字段映射"
#: model:ir.actions.act_window,name:base.res_request-closed
#: model:ir.ui.menu,name:base.next_id_12_close
msgid "My Closed Requests"
-msgstr ""
+msgstr "我的已关闭请求列表"
#. module: base
#: model:ir.ui.menu,name:base.menu_custom
@@ -1952,7 +1954,7 @@ msgstr "模块"
#: model:ir.actions.act_window,name:base.action_res_bank_form
#: model:ir.ui.menu,name:base.menu_action_res_bank_form
msgid "Bank List"
-msgstr ""
+msgstr "银行列表"
#. module: base
#: field:ir.attachment,description:0
@@ -2037,7 +2039,7 @@ msgstr "STOCK_JUSTIFY_RIGHT"
#. module: base
#: model:ir.model,name:base.model_res_partner_function
msgid "Function of the contact"
-msgstr "联系人自定义功能"
+msgstr "联系人职能"
#. module: base
#: model:ir.actions.act_window,name:base.open_module_tree_upgrade
@@ -2360,7 +2362,7 @@ msgstr "把文件存为 .CSV 格式用您喜好的电子表格程序打开。该
#: model:ir.actions.act_window,name:base.action_partner_customer_form
#: view:res.partner:0
msgid "Customers"
-msgstr ""
+msgstr "客户列表"
#. module: base
#: model:res.country,name:base.au
@@ -2553,7 +2555,7 @@ msgstr "STOCK_SAVE_AS"
#. module: base
#: selection:ir.translation,type:0
msgid "SQL Constraint"
-msgstr ""
+msgstr "SQL 约束"
#. module: base
#: field:ir.actions.server,srcmodel_id:0
@@ -2964,7 +2966,7 @@ msgstr "如果设为真,该动作将不会显示表单右侧的工具栏中。
#. module: base
#: model:ir.ui.menu,name:base.menu_custom_multicompany
msgid "Multi company"
-msgstr ""
+msgstr "多公司"
#. module: base
#: view:ir.attachment:0
@@ -3066,7 +3068,7 @@ msgstr "负责与该业务伙伴沟通的内部用户"
#. module: base
#: field:res.partner,parent_id:0
msgid "Parent Partner"
-msgstr ""
+msgstr "上级业务伙伴"
#. module: base
#: view:ir.module.module:0
@@ -3134,7 +3136,7 @@ msgstr "示范数据"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "English (UK)"
-msgstr ""
+msgstr "英语(英国)"
#. module: base
#: model:res.country,name:base.aq
@@ -3159,7 +3161,7 @@ msgstr "网页"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "English (CA)"
-msgstr ""
+msgstr "英语(加拿大)"
#. module: base
#: field:res.partner.event,planned_revenue:0
@@ -3397,7 +3399,7 @@ msgstr "客户端动作设置"
#: model:ir.ui.menu,name:base.menu_partner_address_form
#: view:res.partner.address:0
msgid "Partner Addresses"
-msgstr "业务伙伴地址"
+msgstr "业务伙伴地址列表"
#. module: base
#: selection:module.lang.install,init,lang:0
@@ -3569,7 +3571,7 @@ msgstr "创建动作"
#. module: base
#: selection:ir.actions.report.xml,report_type:0
msgid "HTML from HTML"
-msgstr ""
+msgstr "HTML 来自 HTML"
#. module: base
#: selection:ir.actions.report.xml,report_type:0
@@ -3874,7 +3876,7 @@ msgstr "莫桑比克"
#: model:ir.actions.act_window,name:base.grant_menu_access
#: model:ir.ui.menu,name:base.menu_grant_menu_access
msgid "Manage Menus"
-msgstr ""
+msgstr "管理菜单"
#. module: base
#: field:ir.actions.server,message:0
@@ -3988,7 +3990,7 @@ msgstr "业务伙伴满意度"
#. module: base
#: selection:ir.ui.view,type:0
msgid "mdx"
-msgstr ""
+msgstr "mdx"
#. module: base
#: model:res.country,name:base.bi
@@ -4028,7 +4030,7 @@ msgstr "文件格式"
#. module: base
#: field:res.lang,iso_code:0
msgid "ISO code"
-msgstr ""
+msgstr "ISO 国家代码"
#. module: base
#: model:ir.model,name:base.model_res_config_view
@@ -4090,7 +4092,7 @@ msgstr "a4"
#. module: base
#: field:ir.actions.act_window,search_view_id:0
msgid "Search View Ref."
-msgstr ""
+msgstr "搜索视图引用"
#. module: base
#: view:ir.rule.group:0
@@ -4282,7 +4284,7 @@ msgstr "对象字段"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "French (CH) / Français (CH)"
-msgstr ""
+msgstr "法语(瑞士)/ Français (CH)"
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -4356,7 +4358,7 @@ msgstr "取消卸载"
#: view:res.partner:0
#: view:res.partner.address:0
msgid "Communication"
-msgstr ""
+msgstr "交流"
#. module: base
#: model:ir.model,name:base.model_ir_server_object_lines
@@ -4575,7 +4577,7 @@ msgstr "继续"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "Thai / ภาษาไทย"
-msgstr ""
+msgstr "泰国语 / ภาษาไทย"
#. module: base
#: model:ir.actions.act_window,name:base.ir_property_form
@@ -4672,7 +4674,7 @@ msgstr "对象"
#. module: base
#: field:ir.model.fields,selectable:0
msgid "Selectable"
-msgstr ""
+msgstr "可选择"
#. module: base
#: view:res.request.link:0
@@ -4861,12 +4863,12 @@ msgstr "STOCK_GO_BACK"
#. module: base
#: view:ir.actions.act_window:0
msgid "General Settings"
-msgstr ""
+msgstr "常规设置"
#. module: base
#: model:ir.ui.menu,name:base.custom_shortcuts
msgid "Custom Shortcuts"
-msgstr ""
+msgstr "自定义快捷方式"
#. module: base
#: model:res.country,name:base.dz
@@ -5331,12 +5333,12 @@ msgstr "进行中的业务伙伴事件"
#: model:ir.ui.menu,name:base.menu_partner_function_form
#: view:res.partner.function:0
msgid "Contact Functions"
-msgstr ""
+msgstr "联系人职能"
#. module: base
#: view:multi_company.default:0
msgid "Multi Company"
-msgstr ""
+msgstr "多公司"
#. module: base
#: view:ir.sequence:0
@@ -5474,7 +5476,7 @@ msgstr "GPL-3 或更新版本"
#. module: base
#: selection:ir.actions.report.xml,report_type:0
msgid "HTML from HTML(Mako)"
-msgstr ""
+msgstr "HTML 到 HTML 报表(使用 Mako 模板)"
#. module: base
#: field:workflow.activity,action:0
@@ -5730,7 +5732,7 @@ msgstr "字段 %d 应该是数字"
#: model:ir.actions.act_window,name:base.action_inventory_form
#: model:ir.ui.menu,name:base.menu_action_inventory_form
msgid "Default Company per Object"
-msgstr ""
+msgstr "每对象的默认公司"
#. module: base
#: view:ir.actions.configuration.wizard:0
@@ -5796,7 +5798,7 @@ msgstr "开始安装"
#. module: base
#: help:res.lang,code:0
msgid "This field is used to set/get locales for user"
-msgstr ""
+msgstr "此字段用于设定或获取地区设置"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_2
@@ -5978,7 +5980,7 @@ msgstr "小时 00->24: %(h24)s"
#. module: base
#: help:multi_company.default,field_id:0
msgid "Select field property"
-msgstr ""
+msgstr "选择字段属性"
#. module: base
#: field:res.request.history,date_sent:0
@@ -6820,7 +6822,7 @@ msgstr "子项"
#: view:res.users:0
#: field:res.users,company_ids:0
msgid "Accepted Companies"
-msgstr ""
+msgstr "已接受公司列表"
#. module: base
#: field:ir.report.custom.fields,operation:0
@@ -7021,7 +7023,7 @@ msgstr "="
#: code:addons/base/ir/ir_report_custom.py:0
#, python-format
msgid "Second field should be figures"
-msgstr ""
+msgstr "第二字段应该是数字"
#. module: base
#: model:ir.actions.act_window,name:base.action_model_grid_security
@@ -7105,7 +7107,7 @@ msgstr "坦桑尼亚"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "Danish / Dansk"
-msgstr ""
+msgstr "丹麦语 / Dansk"
#. module: base
#: model:res.country,name:base.cx
@@ -7316,7 +7318,7 @@ msgstr "删除权限"
#. module: base
#: model:ir.model,name:base.model_multi_company_default
msgid "multi_company.default"
-msgstr ""
+msgstr "multi_company.default"
#. module: base
#: selection:workflow.activity,join_mode:0
@@ -7409,7 +7411,7 @@ msgstr "自动加载视图"
#: model:ir.actions.act_window,name:base.action_partner_supplier_form
#: view:res.partner:0
msgid "Suppliers"
-msgstr ""
+msgstr "供应商列表"
#. module: base
#: selection:ir.ui.menu,icon:0
@@ -7446,7 +7448,7 @@ msgstr "省/州"
#. module: base
#: view:multi_company.default:0
msgid "Matching"
-msgstr ""
+msgstr "匹配"
#. module: base
#: field:ir.actions.configuration.wizard,name:0
@@ -7510,7 +7512,7 @@ msgstr "添加技术维护合同"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "Vietnam / Cộng hòa xã hội chủ nghĩa Việt Nam"
-msgstr ""
+msgstr "越南 / Cộng hòa xã hội chủ nghĩa Việt Nam"
#. module: base
#: field:ir.actions.act_window,limit:0
@@ -7611,7 +7613,7 @@ msgstr "不能更新"
#. module: base
#: selection:module.lang.install,init,lang:0
msgid "Klingon"
-msgstr ""
+msgstr "克林贡文"
#. module: base
#: model:res.country,name:base.sg
@@ -7668,7 +7670,7 @@ msgstr "分类名称"
#. module: base
#: view:ir.actions.act_window:0
msgid "Select Groups"
-msgstr ""
+msgstr "选择组"
#. module: base
#: field:ir.sequence,weight:0
@@ -7842,7 +7844,7 @@ msgstr "塞舌尔"
#: code:addons/base/res/res_user.py:0
#, python-format
msgid "You can not have two users with the same login !"
-msgstr ""
+msgstr "用户名必须唯一!"
#. module: base
#: model:res.country,name:base.sl
@@ -7882,7 +7884,7 @@ msgstr "资源对象"
#: field:res.partner.address,function:0
#: selection:workflow.activity,kind:0
msgid "Function"
-msgstr "功能"
+msgstr "职能"
#. module: base
#: selection:res.partner.address,type:0
diff --git a/bin/osv/orm.py b/bin/osv/orm.py
index f1c36026c32..648e8c87989 100644
--- a/bin/osv/orm.py
+++ b/bin/osv/orm.py
@@ -1401,7 +1401,7 @@ class orm_template(object):
else:
xml = '' # what happens here, graph case?
- # raise except_orm(_('Invalid Architecture!'),_("There is no view of type '%s' defined for the structure!") % view_type)
+ raise except_orm(_('Invalid Architecture!'),_("There is no view of type '%s' defined for the structure!") % view_type)
result['arch'] = etree.fromstring(encode(xml))
result['name'] = 'default'
result['field_parent'] = False
diff --git a/bin/service/web_services.py b/bin/service/web_services.py
index ec554ac0325..acfe1bfd41e 100644
--- a/bin/service/web_services.py
+++ b/bin/service/web_services.py
@@ -443,7 +443,10 @@ GNU Public Licence.
return info
def exp_timezone_get(self, db, login, password):
- return time.tzname[0]
+ #timezone detection is safe in multithread, so lazy init is ok here
+ if (not tools.config['timezone']):
+ tools.config['timezone'] = tools.misc.detect_server_timezone()
+ return tools.config['timezone']
def exp_get_available_updates(self, contract_id, contract_password):
diff --git a/bin/tools/config.py b/bin/tools/config.py
index 4cdee8736c2..e0ef74dbb56 100644
--- a/bin/tools/config.py
+++ b/bin/tools/config.py
@@ -77,10 +77,11 @@ class configmanager(object):
'secure' : False,
'syslog' : False,
'log_level': logging.INFO,
- 'assert_exit_level': logging.WARNING, # level above which a failed assert will be raise
+ 'assert_exit_level': logging.WARNING, # level above which a failed assert will be raised
'cache_timeout': 100000,
'login_message': False,
'list_db' : True,
+ 'timezone' : False, # to override the default TZ
}
self.misc = {}
@@ -111,6 +112,7 @@ class configmanager(object):
help="update a module (use \"all\" for all modules)")
parser.add_option("--cache-timeout", dest="cache_timeout",
help="set the timeout for the cache system", default=100000, type="int")
+ parser.add_option("-t", "--timezone", dest="timezone", help="specify reference timezone for the server (e.g. Europe/Brussels")
# stops the server from launching after initialization
parser.add_option("--stop-after-init", action="store_true", dest="stop_after_init", default=False,
@@ -227,7 +229,7 @@ class configmanager(object):
'db_port', 'list_db', 'logfile', 'pidfile', 'smtp_port', 'cache_timeout',
'email_from', 'smtp_server', 'smtp_user', 'smtp_password', 'price_accuracy',
'netinterface', 'netport', 'db_maxconn', 'import_partial', 'addons_path',
- 'netrpc', 'xmlrpc', 'syslog', 'without_demo']
+ 'netrpc', 'xmlrpc', 'syslog', 'without_demo', 'timezone',]
if hasSSL:
keys.extend(['smtp_ssl', 'secure_cert_file', 'secure_pkey_file'])
@@ -266,6 +268,17 @@ class configmanager(object):
self.options['translate_modules'] = opt.translate_modules and map(lambda m: m.strip(), opt.translate_modules.split(',')) or ['all']
self.options['translate_modules'].sort()
+ if self.options['timezone']:
+ # If an explicit TZ was provided in the config, make sure it is known
+ try:
+ import pytz
+ tz = pytz.timezone(self.options['timezone'])
+ except pytz.UnknownTimeZoneError:
+ die(True, "The specified timezone (%s) is invalid" % self.options['timezone'])
+ except:
+ # If pytz is missing, don't check the provided TZ, it will be ignored anyway.
+ pass
+
if opt.pg_path:
self.options['pg_path'] = opt.pg_path
diff --git a/bin/tools/misc.py b/bin/tools/misc.py
index 001f62e0968..a237ee1b603 100644
--- a/bin/tools/misc.py
+++ b/bin/tools/misc.py
@@ -1174,6 +1174,89 @@ def detect_ip_addr():
ip_addr = 'localhost'
return ip_addr
+# RATIONALE BEHIND TIMESTAMP CALCULATIONS AND TIMEZONE MANAGEMENT:
+# The server side never does any timestamp calculation, always
+# sends them in a naive (timezone agnostic) format supposed to be
+# expressed within the server timezone, and expects the clients to
+# provide timestamps in the server timezone as well.
+# It stores all timestamps in the database in naive format as well,
+# which also expresses the time in the server timezone.
+# For this reason the server makes its timezone name available via the
+# common/timezone_get() rpc method, which clients need to read
+# to know the appropriate time offset to use when reading/writing
+# times.
+def get_win32_timezone():
+ """Attempt to return the "standard name" of the current timezone on a win32 system.
+ @return: the standard name of the current win32 timezone, or False if it cannot be found.
+ """
+ res = False
+ if (sys.platform == "win32"):
+ try:
+ import _winreg
+ hklm = _winreg.ConnectRegistry(None,_winreg.HKEY_LOCAL_MACHINE)
+ current_tz_key = _winreg.OpenKey(hklm, r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation", 0,_winreg.KEY_ALL_ACCESS)
+ res = str(_winreg.QueryValueEx(current_tz_key,"StandardName")[0]) # [0] is value, [1] is type code
+ _winreg.CloseKey(current_tz_key)
+ _winreg.CloseKey(hklm)
+ except:
+ pass
+ return res
+
+def detect_server_timezone():
+ """Attempt to detect the timezone to use on the server side.
+ Defaults to UTC if no working timezone can be found.
+ @return: the timezone identifier as expected by pytz.timezone.
+ """
+ import time
+ import netsvc
+ try:
+ import pytz
+ except:
+ netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_WARNING,
+ "Python pytz module is not available. Timezone will be set to UTC by default.")
+ return 'UTC'
+
+ # Option 1: the configuration option (did not exist before, so no backwards compatibility issue)
+ # Option 2: to be backwards compatible with 5.0 or earlier, the value from time.tzname[0], but only if it is known to pytz
+ # Option 3: the environment variable TZ
+ sources = [ (config['timezone'], 'OpenERP configuration'),
+ (time.tzname[0], 'time.tzname'),
+ (os.environ.get('TZ',False),'TZ environment variable'), ]
+ # Option 4: OS-specific: /etc/timezone on Unix
+ if (os.path.exists("/etc/timezone")):
+ tz_value = False
+ try:
+ f = open("/etc/timezone")
+ tz_value = f.read(128).strip()
+ except:
+ pass
+ finally:
+ f.close()
+ sources.append((tz_value,"/etc/timezone file"))
+ # Option 5: timezone info from registry on Win32
+ if (sys.platform == "win32"):
+ # Timezone info is stored in windows registry.
+ # However this is not likely to work very well as the standard name
+ # of timezones in windows is rarely something that is known to pytz.
+ # But that's ok, it is always possible to use a config option to set
+ # it explicitly.
+ sources.append((get_win32_timezone(),"Windows Registry"))
+
+ for (value,source) in sources:
+ if value:
+ try:
+ tz = pytz.timezone(value)
+ netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_INFO,
+ "Using timezone %s obtained from %s." % (tz.zone,source))
+ return value
+ except pytz.UnknownTimeZoneError:
+ netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_WARNING,
+ "The timezone specified in %s (%s) is invalid, ignoring it." % (source,value))
+
+ netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_WARNING,
+ "No valid timezone could be detected, using default UTC timezone. You can specify it explicitly with option 'timezone' in the server configuration.")
+ return 'UTC'
+
if __name__ == '__main__':
import doctest