[MERGE] Sync with trunk

bzr revid: tde@openerp.com-20130808083541-x1grch2pugu0p78f
This commit is contained in:
Thibault Delavallée 2013-08-08 10:35:41 +02:00
commit 08caa3c72b
14 changed files with 4241 additions and 198 deletions

View File

@ -0,0 +1,361 @@
# Russian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-08-05 10:40+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-08-06 04:47+0000\n"
"X-Generator: Launchpad (build 16718)\n"
#. module: account_bank_statement_extensions
#: help:account.bank.statement.line.global,name:0
msgid "Originator to Beneficiary Information"
msgstr "Информация от плательщика получателю"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
#: selection:account.bank.statement.line,state:0
msgid "Confirmed"
msgstr "Подтверждено"
#. module: account_bank_statement_extensions
#: view:account.bank.statement:0
#: view:account.bank.statement.line:0
msgid "Glob. Id"
msgstr ""
#. module: account_bank_statement_extensions
#: selection:account.bank.statement.line.global,type:0
msgid "CODA"
msgstr ""
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,parent_id:0
msgid "Parent Code"
msgstr "Основной код"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Debit"
msgstr "Дебет"
#. module: account_bank_statement_extensions
#: view:cancel.statement.line:0
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_cancel_statement_line
#: model:ir.model,name:account_bank_statement_extensions.model_cancel_statement_line
msgid "Cancel selected statement lines"
msgstr "Отмена выбранных позиций выписки"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,val_date:0
msgid "Value Date"
msgstr "Дата зачисления"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Group By..."
msgstr "Группировать по ..."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
#: selection:account.bank.statement.line,state:0
msgid "Draft"
msgstr "Черновик"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement"
msgstr "Выписка"
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_confirm_statement_line
#: model:ir.model,name:account_bank_statement_extensions.model_confirm_statement_line
msgid "Confirm selected statement lines"
msgstr "Подтверждение выбранных позиций выписки"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
#: model:ir.actions.report.xml,name:account_bank_statement_extensions.bank_statement_balance_report
msgid "Bank Statement Balances Report"
msgstr "Отчет об остатках банковской выписки"
#. module: account_bank_statement_extensions
#: view:cancel.statement.line:0
msgid "Cancel Lines"
msgstr "Отменить позиции"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line_global
msgid "Batch Payment Info"
msgstr ""
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,state:0
msgid "Status"
msgstr "Статус"
#. module: account_bank_statement_extensions
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:129
#, python-format
msgid ""
"Delete operation not allowed. Please go to the associated bank "
"statement in order to delete and/or modify bank statement line."
msgstr ""
"Операция удаления запрещена. Пожалуйста, обратитесь к соответствующей "
"банковской выписке для удаления/изменения позиции."
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "or"
msgstr "или"
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Confirm Lines"
msgstr "Подтвердить позиции"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
msgid "Transactions"
msgstr "Операции"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,type:0
msgid "Type"
msgstr "Тип"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
#: report:bank.statement.balance.report:0
msgid "Journal"
msgstr "Журнал"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Confirmed Statement Lines."
msgstr "Подтвержденные позиции выписки."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Credit Transactions."
msgstr "Операции по кредиту"
#. module: account_bank_statement_extensions
#: model:ir.actions.act_window,help:account_bank_statement_extensions.action_cancel_statement_line
msgid "cancel selected statement lines."
msgstr "отменить выбранные позиции выписки"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_number:0
msgid "Counterparty Number"
msgstr "Число контрагентов"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
msgid "Closing Balance"
msgstr "Итоговый баланс"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
msgid "Date"
msgstr "Дата"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
#: field:account.bank.statement.line,globalisation_amount:0
msgid "Glob. Amount"
msgstr ""
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Debit Transactions."
msgstr "Операции по дебету"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Extended Filters..."
msgstr "Расширенные фильтры..."
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Confirmed lines cannot be changed anymore."
msgstr "Нельзя изменить подтвержденные позиции."
#. module: account_bank_statement_extensions
#: view:cancel.statement.line:0
msgid "Are you sure you want to cancel the selected Bank Statement lines ?"
msgstr ""
"Вы уверены, что хотите отменить выбранные позиции банковской выписки ?"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
msgid "Name"
msgstr "Название"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,name:0
msgid "OBI"
msgstr "Назначение"
#. module: account_bank_statement_extensions
#: selection:account.bank.statement.line.global,type:0
msgid "ISO 20022"
msgstr "ISO 20022"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Notes"
msgstr "Примечания"
#. module: account_bank_statement_extensions
#: selection:account.bank.statement.line.global,type:0
msgid "Manual"
msgstr "Ручной"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Bank Transaction"
msgstr "Банковские операции"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Credit"
msgstr "Кредит"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,amount:0
msgid "Amount"
msgstr "Сумма"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Fin.Account"
msgstr "Фин. Счет"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_currency:0
msgid "Counterparty Currency"
msgstr "Валюта контрагента"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_bic:0
msgid "Counterparty BIC"
msgstr "БИК контрагента"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,child_ids:0
msgid "Child Codes"
msgstr "Субкоды"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Search Bank Transactions"
msgstr "Поиск банковских операций"
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Are you sure you want to confirm the selected Bank Statement lines ?"
msgstr ""
"Вы уверены, что хотите, подтвердить выбранные позиции банковской выписки ?"
#. module: account_bank_statement_extensions
#: help:account.bank.statement.line,globalisation_id:0
msgid ""
"Code to identify transactions belonging to the same globalisation level "
"within a batch payment"
msgstr ""
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Draft Statement Lines."
msgstr "Черновики позиций выписки."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Glob. Am."
msgstr ""
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Позиция банковской выписки"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,code:0
msgid "Code"
msgstr "Код"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_name:0
msgid "Counterparty Name"
msgstr "Название контрагента"
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank
msgid "Bank Accounts"
msgstr "Банковские счета"
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement
msgid "Bank Statement"
msgstr "Банковская выписка"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement Line"
msgstr "Позиция выписки"
#. module: account_bank_statement_extensions
#: sql_constraint:account.bank.statement.line.global:0
msgid "The code must be unique !"
msgstr "Код должен быть уникальным !"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,bank_statement_line_ids:0
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_bank_statement_line
#: model:ir.ui.menu,name:account_bank_statement_extensions.bank_statement_line
msgid "Bank Statement Lines"
msgstr "Позиции банковской выписки"
#. module: account_bank_statement_extensions
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:129
#, python-format
msgid "Warning!"
msgstr "Внимание!"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
msgid "Child Batch Payments"
msgstr ""
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Cancel"
msgstr "Отмена"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement Lines"
msgstr "Позиции выписки"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Total Amount"
msgstr "Итоговая сумма"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,globalisation_id:0
msgid "Globalisation ID"
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-07-23 03:21+0000\n"
"PO-Revision-Date: 2013-08-06 09:41+0000\n"
"Last-Translator: fanvil <fanvil@hotmail.com>\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: 2013-07-24 05:31+0000\n"
"X-Generator: Launchpad (build 16700)\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: crm
#: view:crm.lead.report:0
@ -185,7 +185,7 @@ msgstr "预计结束月份"
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr "保留复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。"
msgstr "保留复杂的摘要(消息数量,……等)。这一摘要直接是是HTML格式,以便插入到看板视图。"
#. module: crm
#: code:addons/crm/crm_lead.py:640
@ -583,6 +583,7 @@ msgid ""
" If the call needs to be done then the status is set "
"to 'Not Held'."
msgstr ""
"当一个案子新建时,状态被设为‘待处理’,当案子进行中,状态被设为‘打开’,当电话结束,状态被设为‘挂起’。如果需要电话,状态设为‘未挂起’"
#. module: crm
#: field:crm.case.section,message_summary:0
@ -843,7 +844,7 @@ msgstr "参考2"
msgid ""
"Link between stages and sales teams. When set, this limitate the current "
"stage to the selected sales teams."
msgstr ""
msgstr "在阶段和销售团队之间建立链接。设置后将限制此阶段只能用于被选中的销售团队。"
#. module: crm
#: view:crm.case.stage:0
@ -979,7 +980,7 @@ msgstr "下一动作"
#: code:addons/crm/crm_lead.py:780
#, python-format
msgid "<b>Partner</b> set to <em>%s</em>."
msgstr ""
msgstr "<b>业务伙伴</b> 设给 <em>%s</em>."
#. module: crm
#: selection:crm.lead.report,state:0
@ -1338,7 +1339,7 @@ msgstr "发送邮件的时候,默认的邮件地址来自销售团队。"
msgid ""
"Phone Calls Assigned to the current user or with a team having the current "
"user as team leader"
msgstr ""
msgstr "被分配给当前用户或者当前用户领导的销售团队的电话沟通任务。"
#. module: crm
#: view:crm.segmentation:0
@ -2884,7 +2885,7 @@ msgstr "发现日期"
#. module: crm
#: view:crm.lead:0
msgid "at"
msgstr ""
msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead1

View File

@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2013-06-27 16:03+0000\n"
"PO-Revision-Date: 2012-12-12 12:51+0000\n"
"Last-Translator: Pedro Manuel Baeza <pedro.baeza@gmail.com>\n"
"PO-Revision-Date: 2013-08-07 02:00+0000\n"
"Last-Translator: Alejandro Santana <alejandrosantana@anubia.es>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n"
"X-Generator: Launchpad (build 16681)\n"
"X-Launchpad-Export-Date: 2013-08-08 04:39+0000\n"
"X-Generator: Launchpad (build 16723)\n"
#. module: google_drive
#: model:ir.ui.menu,name:google_drive.menu_google_drive_config
msgid "Google Drive configuration"
msgstr ""
msgstr "Configuración de Google Drive"
#. module: google_drive
#: code:addons/google_drive/google_drive.py:48
@ -39,6 +39,11 @@ msgid ""
"in your Google Drive and in OpenERP attachment will be named\n"
" 'Agrolait_SO0001_Sales'."
msgstr ""
"El nombre del documento adjunto puede contener información fija o variable. "
"Para distinguir documentos en Google Drive, use palabras y campos fijos. "
"Así, en el ejemplo anterior, si se escribió 'Agrolait_%(name)s_Sales' en el "
"campo de nombre de GoogleDrive, el documento en su Google Drive y en los "
"adjuntos de OpenERP se llamarán 'Agrolait_SO0001_Sales'."
#. module: google_drive
#: view:google.drive.config:0
@ -46,16 +51,18 @@ msgid ""
"- If filter is not specified, link of google document will appear in "
"\"More\" option for all users for all opportunities."
msgstr ""
"- Si no especifica un filtro, el enlace del documento de Google aparecerá en "
"la opción \"Más\" para todos los usuarios para todas las oportunidades."
#. module: google_drive
#: view:google.drive.config:0
msgid "To create a new filter:"
msgstr ""
msgstr "Para crear un nuevo filtro:"
#. module: google_drive
#: model:ir.model,name:google_drive.model_base_config_settings
msgid "base.config.settings"
msgstr ""
msgstr "base.config.settings"
#. module: google_drive
#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config
@ -73,17 +80,29 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Pulse para añadir una plantilla.\n"
" </p>\n"
" <p>\n"
" Enlace sus propias plantillas de Google Drive a "
"cualquier registro de OpenERP. Si tiene documentos realmente específicos que "
"quiere que su colaborador rellene (como usar una hoja de cálculo para "
"controlar la calidad de su producto o revisar los detalles de entrega de "
"cada pedido en un país extranjero,...) es muy sencillo gestionarlo. "
"Enlácelos en OpenERP y úselos para colaborar con sus empleados.\n"
" </p>\n"
" "
#. module: google_drive
#: code:addons/google_drive/google_drive.py:150
#, python-format
msgid "Incorrect URL!"
msgstr ""
msgstr "¡URL incorrecta!"
#. module: google_drive
#: view:base.config.settings:0
msgid "Configure your templates"
msgstr ""
msgstr "Configure sus plantillas"
#. module: google_drive
#: help:google.drive.config,name_template:0
@ -91,6 +110,8 @@ msgid ""
"Choose how the new google drive will be named, on google side. Eg. "
"gdoc_%(field_name)s"
msgstr ""
"Elija el nombre de la nueva unidad de Google Drive, en el lado de Google. "
"P.ej.: gdoc_%(field_name)s"
#. module: google_drive
#: view:google.drive.config:0
@ -98,6 +119,8 @@ msgid ""
"- Go to the OpenERP document you want to filter. For instance, go to "
"Opportunities and search on Sales Department."
msgstr ""
"- Vaya al documento de OpenERP que quiera filtrar. Por ejemplo, vaya a "
"Oportunidades y busque en el Departamento de ventas."
#. module: google_drive
#: view:google.drive.config:0
@ -105,6 +128,8 @@ msgid ""
"- In this \"Search\" view, select the option \"Save Current Filter\", enter "
"the name (Ex: Sales Department)"
msgstr ""
"- En esta vista de \"Búsqueda\", seleccione la opción \"Guardar filtro "
"actual\" e introduzca el nombre (p.ej.: Departamento de ventas)"
#. module: google_drive
#: view:google.drive.config:0
@ -113,6 +138,9 @@ msgid ""
"\"More\" options will appear for all users in opportunities of Sales "
"Department."
msgstr ""
"- Si selecciona \"Compartir con todos los usuarios\", el enlace al documento "
"de Google en la opción \"Más\" aparecerá para todos los usuarios en las "
"oportunidades del Departamento de ventas."
#. module: google_drive
#: view:google.drive.config:0
@ -121,23 +149,28 @@ msgid ""
"\"More\" options will not appear for other users in opportunities of Sales "
"Department."
msgstr ""
"- Si no selecciona \"Compartir con todos los usuarios\", el enlace al "
"documento de Google en la opción \"Más\" no aparecerá para otros usuarios en "
"las oportunidades del Departamento de ventas."
#. module: google_drive
#: code:addons/google_drive/google_drive.py:48
#, python-format
msgid "At least one key cannot be found in your Google Drive name pattern"
msgstr ""
"No se ha podido encontrar al menos una clave de su patrón de nombres de "
"Google Drive"
#. module: google_drive
#: code:addons/google_drive/google_drive.py:150
#, python-format
msgid "Please enter a valid Google Document URL."
msgstr ""
msgstr "Por favor, introduzca una URL de documento de Google válida."
#. module: google_drive
#: field:google.drive.config,google_drive_client_id:0
msgid "Google Client "
msgstr ""
msgstr "Cliente de Google "
#. module: google_drive
#: view:google.drive.config:0
@ -145,43 +178,45 @@ msgid ""
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
"a4/edit"
msgstr ""
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
"a4/edit"
#. module: google_drive
#: field:google.drive.config,filter_id:0
msgid "Filter"
msgstr ""
msgstr "Filtro"
#. module: google_drive
#: field:google.drive.config,name_template:0
msgid "Google Drive Name Pattern"
msgstr ""
msgstr "Patrón de nombres de Google Drive"
#. module: google_drive
#: help:base.config.settings,google_drive_uri:0
msgid "The URL to generate the authorization code from Google"
msgstr ""
msgstr "La URL para generar el código de autorización de Google"
#. module: google_drive
#: model:ir.filters,name:google_drive.filter_partner
msgid "Customer"
msgstr ""
msgstr "Cliente"
#. module: google_drive
#: field:google.drive.config,google_drive_resource_id:0
msgid "Resource Id"
msgstr ""
msgstr "ID del recurso"
#. module: google_drive
#: code:addons/google_drive/google_drive.py:91
#, python-format
msgid "The Google Template cannot be found. Maybe it has been deleted."
msgstr ""
msgstr "No se encuentra la plantilla de Google. Tal vez se haya eliminado."
#. module: google_drive
#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config
#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config
msgid "Google Drive Templates"
msgstr ""
msgstr "Plantillas de Google Drive"
#. module: google_drive
#: code:addons/google_drive/google_drive.py:81
@ -190,23 +225,27 @@ msgid ""
"Something went wrong during the token generation. Please request again an "
"authorization code in %(menu:base_setup.menu_general_configuration)s."
msgstr ""
"Algo ha ido mal durante la creación del testigo. Por favor, solicite un "
"código de autorización otra vez en "
"%(menu:base_setup.menu_general_configuration)s."
#. module: google_drive
#: code:addons/google_drive/google_drive.py:124
#, python-format
msgid "Google Drive Error!"
msgstr ""
msgstr "¡Error de Google Drive!"
#. module: google_drive
#: field:base.config.settings,google_drive_uri:0
msgid "URI"
msgstr ""
msgstr "URI"
#. module: google_drive
#: code:addons/google_drive/google_drive.py:124
#, python-format
msgid "Creating google drive may only be done by one at a time."
msgstr ""
"Es posible que la creación de Google Drive sólo se pueda hacer de una en una."
#. module: google_drive
#: field:google.drive.config,model:0
@ -217,38 +256,40 @@ msgstr "Modelo"
#. module: google_drive
#: view:google.drive.config:0
msgid "Google Drive Configuration"
msgstr ""
msgstr "Configuración de Google Drive"
#. module: google_drive
#: field:google.drive.config,name:0
msgid "Template Name"
msgstr ""
msgstr "Nombre de la plantilla"
#. module: google_drive
#: constraint:google.drive.config:0
msgid ""
"Model of selected filter is not matching with model of current template."
msgstr ""
"El modelo del filtro seleccionado no coincide con el modelo de la plantilla "
"actual."
#. module: google_drive
#: field:google.drive.config,google_drive_template_url:0
msgid "Template URL"
msgstr ""
msgstr "URL de la plantilla"
#. module: google_drive
#: view:base.config.settings:0
msgid "and paste it here"
msgstr ""
msgstr "y péguela aquí"
#. module: google_drive
#: field:base.config.settings,google_drive_authorization_code:0
msgid "Authorization Code"
msgstr ""
msgstr "Cídigo de autorización"
#. module: google_drive
#: model:ir.model,name:google_drive.model_google_drive_config
msgid "Google Drive templates config"
msgstr ""
msgstr "Configuración de plantillas de Google Drive"
#. module: google_drive
#: code:addons/google_drive/google_drive.py:64
@ -257,3 +298,6 @@ msgid ""
"You haven't configured 'Authorization Code' generated from google, Please "
"generate and configure it in %(menu:base_setup.menu_general_configuration)s."
msgstr ""
"No ha configurado el 'código de autorización' generado por Google. Por "
"favor, genérelo y configúrelo en "
"%(menu:base_setup.menu_general_configuration)s."

1687
addons/mail/i18n/bs.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -139,10 +139,16 @@ class mail_mail(osv.Model):
# notification field: if not set, set if mail comes from an existing mail.message
if 'notification' not in values and values.get('mail_message_id'):
values['notification'] = True
mail_id = super(mail_mail, self).create(cr, uid, values, context=context)
# reply_to: if not set, set with default values that require creation values
# but delegate after creation because of mail_message.message_id automatic
# creation using existence of reply_to
if not values.get('reply_to'):
values['reply_to'] = self._get_reply_to(cr, uid, values, context=context)
return super(mail_mail, self).create(cr, uid, values, context=context)
reply_to = self._get_reply_to(cr, uid, values, context=context)
if reply_to:
self.write(cr, uid, [mail_id], {'reply_to': reply_to}, context=context)
return mail_id
def unlink(self, cr, uid, ids, context=None):
# cascade-delete the parent message for all mails that are not created for a notification

View File

@ -682,6 +682,12 @@ class mail_thread(osv.AbstractModel):
assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message).'
_warn('posting a message without model should be with a null res_id (private message), resetting thread_id')
thread_id = 0
# Private message: should have a parent_id (only answers)
if not model and not message_dict.get('parent_id'):
if assert_model:
assert message_dict.get('parent_id'), 'Routing: posting a message without model should be with a parent_id (private mesage).'
_warn('posting a message without model should be with a parent_id (private mesage), skipping')
return ()
# Existing Document: check if exists; if not, fallback on create if allowed
if thread_id and not model_pool.exists(cr, uid, thread_id):
@ -695,7 +701,7 @@ class mail_thread(osv.AbstractModel):
return ()
# Existing Document: check model accepts the mailgateway
if thread_id and not hasattr(model_pool, 'message_update'):
if thread_id and model and not hasattr(model_pool, 'message_update'):
if create_fallback:
_warn('model %s does not accept document update, fall back on document creation' % model)
thread_id = None
@ -706,7 +712,7 @@ class mail_thread(osv.AbstractModel):
return ()
# New Document: check model accepts the mailgateway
if not thread_id and not hasattr(model_pool, 'message_new'):
if not thread_id and model and not hasattr(model_pool, 'message_new'):
if assert_model:
assert hasattr(model_pool, 'message_new'), 'Model %s does not accept document creation, crashing' % model
_warn('model %s does not accept document creation, skipping' % model)
@ -798,16 +804,16 @@ class mail_thread(osv.AbstractModel):
# 2. Reply to a private message
if in_reply_to:
message_ids = self.pool.get('mail.message').search(cr, uid, [
mail_message_ids = self.pool.get('mail.message').search(cr, uid, [
('message_id', '=', in_reply_to),
'!', ('message_id', 'ilike', 'reply_to')
], limit=1, context=context)
if message_ids:
message = self.pool.get('mail.message').browse(cr, uid, message_ids[0], context=context)
if mail_message_ids:
mail_message = self.pool.get('mail.message').browse(cr, uid, mail_message_ids[0], context=context)
_logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s',
email_from, email_to, message_id, message.id, custom_values, uid)
email_from, email_to, message_id, mail_message.id, custom_values, uid)
route = self.message_route_verify(cr, uid, message, message_dict,
(message.model, message.res_id, custom_values, uid, None),
(mail_message.model, mail_message.res_id, custom_values, uid, None),
update_author=True, assert_model=True, create_fallback=True, context=context)
return route and [route] or []

View File

@ -20,7 +20,7 @@
##############################################################################
from openerp.addons.mail.tests.test_mail_base import TestMailBase
from openerp.tools import mute_logger, email_split
from openerp.tools import mute_logger
MAIL_TEMPLATE = """Return-Path: <whatever-2a840@postmaster.twitter.com>
To: {to}
@ -101,9 +101,9 @@ class TestMailgateway(TestMailBase):
# Do: find partner with email -> first partner should be found
partner_info = self.mail_thread.message_partner_info_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0]
self.assertEqual(partner_info['full_name'], 'Maybe Raoul <test@test.fr>',
'mail_thread: message_partner_info_from_emails did not handle email')
'mail_thread: message_partner_info_from_emails did not handle email')
self.assertEqual(partner_info['partner_id'], p_a_id,
'mail_thread: message_partner_info_from_emails wrong partner found')
'mail_thread: message_partner_info_from_emails wrong partner found')
# Data: add some data about partners
# 2 - User BRaoul
@ -112,7 +112,7 @@ class TestMailgateway(TestMailBase):
# Do: find partner with email -> first user should be found
partner_info = self.mail_thread.message_partner_info_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0]
self.assertEqual(partner_info['partner_id'], p_b_id,
'mail_thread: message_partner_info_from_emails wrong partner found')
'mail_thread: message_partner_info_from_emails wrong partner found')
# --------------------------------------------------
# CASE1: with object
@ -122,7 +122,7 @@ class TestMailgateway(TestMailBase):
self.mail_group.message_subscribe(cr, uid, [group_pigs.id], [p_b_id])
partner_info = self.mail_group.message_partner_info_from_emails(cr, uid, group_pigs.id, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0]
self.assertEqual(partner_info['partner_id'], p_b_id,
'mail_thread: message_partner_info_from_emails wrong partner found')
'mail_thread: message_partner_info_from_emails wrong partner found')
def test_05_mail_message_mail_mail(self):
""" Tests designed for testing email values based on mail.message, aliases, ... """
@ -146,46 +146,46 @@ class TestMailgateway(TestMailBase):
msg = self.mail_message.browse(cr, user_raoul_id, msg_id)
# Test: message content
self.assertIn('reply_to', msg.message_id,
'mail_message: message_id should be specific to a mail_message with a given reply_to')
'mail_message: message_id should be specific to a mail_message with a given reply_to')
self.assertEqual(msg.reply_to, reply_to1,
'mail_message: incorrect reply_to: should come from values')
'mail_message: incorrect reply_to: should come from values')
self.assertEqual(msg.email_from, email_from1,
'mail_message: incorrect email_from: should come from values')
'mail_message: incorrect email_from: should come from values')
# Do: create a mail_mail with the previous mail_message
mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'})
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, reply_to1,
'mail_mail: incorrect reply_to: should come from mail.message')
'mail_mail: incorrect reply_to: should come from mail.message')
self.assertEqual(mail.email_from, email_from1,
'mail_mail: incorrect email_from: should come from mail.message')
'mail_mail: incorrect email_from: should come from mail.message')
# Do: create a mail_mail with the previous mail_message + specified reply_to
mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel', 'reply_to': reply_to2})
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, reply_to2,
'mail_mail: incorrect reply_to: should come from values')
'mail_mail: incorrect reply_to: should come from values')
self.assertEqual(mail.email_from, email_from1,
'mail_mail: incorrect email_from: should come from mail.message')
'mail_mail: incorrect email_from: should come from mail.message')
# Do: mail_message attached to a document
msg_id = self.mail_message.create(cr, user_raoul_id, {'model': 'mail.group', 'res_id': self.group_pigs_id})
msg = self.mail_message.browse(cr, user_raoul_id, msg_id)
# Test: message content
self.assertIn('mail.group', msg.message_id,
'mail_message: message_id should contain model')
'mail_message: message_id should contain model')
self.assertIn('%s' % self.group_pigs_id, msg.message_id,
'mail_message: message_id should contain res_id')
'mail_message: message_id should contain res_id')
self.assertFalse(msg.reply_to,
'mail_message: incorrect reply_to: should not be generated if not specified')
'mail_message: incorrect reply_to: should not be generated if not specified')
self.assertEqual(msg.email_from, raoul_from,
'mail_message: incorrect email_from: should be Raoul')
'mail_message: incorrect email_from: should be Raoul')
# Do: create a mail_mail based on the previous mail_message
mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'})
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, raoul_reply,
'mail_mail: incorrect reply_to: should be Raoul')
'mail_mail: incorrect reply_to: should be Raoul')
# Data: set catchall domain
self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', alias_domain)
@ -199,7 +199,7 @@ class TestMailgateway(TestMailBase):
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, raoul_reply_alias,
'mail_mail: incorrect reply_to: should be Pigs alias')
'mail_mail: incorrect reply_to: should be Pigs alias')
# Update message: test alias on email_from
msg_id = self.mail_message.create(cr, user_raoul_id, {})
@ -209,7 +209,7 @@ class TestMailgateway(TestMailBase):
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, raoul_from_alias,
'mail_mail: incorrect reply_to: should be message email_from using Raoul alias')
'mail_mail: incorrect reply_to: should be message email_from using Raoul alias')
# Update message
self.mail_message.write(cr, user_raoul_id, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False})
@ -219,7 +219,7 @@ class TestMailgateway(TestMailBase):
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, msg.email_from,
'mail_mail: incorrect reply_to: should be message email_from')
'mail_mail: incorrect reply_to: should be message email_from')
# Data: set catchall alias
self.registry('ir.config_parameter').set_param(self.cr, self.uid, 'mail.catchall.alias', 'gateway')
@ -232,21 +232,21 @@ class TestMailgateway(TestMailBase):
mail = self.mail_mail.browse(cr, uid, mail_id)
# Test: mail_mail Content-Type
self.assertEqual(mail.reply_to, 'gateway@schlouby.fr',
'mail_mail: reply_to should equal the catchall email alias')
'mail_mail: reply_to should equal the catchall email alias')
# Do: create a mail_mail
mail_id = self.mail_mail.create(cr, uid, {'state': 'cancel'})
mail = self.mail_mail.browse(cr, uid, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, 'gateway@schlouby.fr',
'mail_mail: reply_to should equal the catchall email alias')
'mail_mail: reply_to should equal the catchall email alias')
# Do: create a mail_mail
mail_id = self.mail_mail.create(cr, uid, {'state': 'cancel', 'reply_to': 'someone@example.com'})
mail = self.mail_mail.browse(cr, uid, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, 'someone@example.com',
'mail_mail: reply_to should equal the rpely_to given to create')
'mail_mail: reply_to should equal the rpely_to given to create')
@mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm')
def test_10_message_process(self):
@ -254,9 +254,9 @@ class TestMailgateway(TestMailBase):
cr, uid, user_raoul = self.cr, self.uid, self.user_raoul
def format_and_process(template, to='groups@example.com, other@gmail.com', subject='Frogs',
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>',
model=None):
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>',
model=None):
self.assertEqual(self.mail_group.search(cr, uid, [('name', '=', subject)]), [])
mail = template.format(to=to, subject=subject, extra=extra, email_from=email_from, msg_id=msg_id)
self.mail_thread.message_process(cr, uid, model, mail)
@ -289,29 +289,29 @@ class TestMailgateway(TestMailBase):
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
res = self.mail_group.perm_read(cr, uid, [frog_group.id], details=False)
self.assertEqual(res[0].get('create_uid'), uid,
'message_process: group should have been created by uid as alias_user__id is False on the alias')
'message_process: group should have been created by uid as alias_user__id is False on the alias')
# Test: one message that is the incoming email
self.assertEqual(len(frog_group.message_ids), 1,
'message_process: newly created group should have the incoming email in message_ids')
'message_process: newly created group should have the incoming email in message_ids')
msg = frog_group.message_ids[0]
self.assertEqual('Frogs', msg.subject,
'message_process: newly created group should have the incoming email as first message')
'message_process: newly created group should have the incoming email as first message')
self.assertIn('Please call me as soon as possible this afternoon!', msg.body,
'message_process: newly created group should have the incoming email as first message')
'message_process: newly created group should have the incoming email as first message')
self.assertEqual('email', msg.type,
'message_process: newly created group should have an email as first message')
'message_process: newly created group should have an email as first message')
self.assertEqual('Discussions', msg.subtype_id.name,
'message_process: newly created group should not have a log first message but an email')
'message_process: newly created group should not have a log first message but an email')
# Test: message: unknown email address -> message has email_from, not author_id
self.assertFalse(msg.author_id,
'message_process: message on created group should not have an author_id')
'message_process: message on created group should not have an author_id')
self.assertIn('test.sylvie.lelitre@agrolait.com', msg.email_from,
'message_process: message on created group should have an email_from')
'message_process: message on created group should have an email_from')
# Test: followers: nobody
self.assertEqual(len(frog_group.message_follower_ids), 0, 'message_process: newly create group should not have any follower')
# Test: sent emails: no-one
self.assertEqual(len(sent_emails), 0,
'message_process: should create emails without any follower added')
'message_process: should create emails without any follower added')
# Data: unlink group
frog_group.unlink()
@ -324,11 +324,11 @@ class TestMailgateway(TestMailBase):
# Test: email bounced
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 1,
'message_process: incoming email on Partners alias should send a bounce email')
'message_process: incoming email on Partners alias should send a bounce email')
self.assertIn('Frogs', sent_emails[0].get('subject'),
'message_process: bounce email on Partners alias should contain the original subject')
'message_process: bounce email on Partners alias should contain the original subject')
self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to'),
'message_process: bounce email on Partners alias should have original email sender as recipient')
'message_process: bounce email on Partners alias should have original email sender as recipient')
# Do: incoming email from an unknown partner on a Followers only alias -> bounce
self._init_mock_build_email()
@ -339,11 +339,11 @@ class TestMailgateway(TestMailBase):
# Test: email bounced
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 1,
'message_process: incoming email on Followers alias should send a bounce email')
'message_process: incoming email on Followers alias should send a bounce email')
self.assertIn('Frogs', sent_emails[0].get('subject'),
'message_process: bounce email on Followers alias should contain the original subject')
'message_process: bounce email on Followers alias should contain the original subject')
self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to'),
'message_process: bounce email on Followers alias should have original email sender as recipient')
'message_process: bounce email on Followers alias should have original email sender as recipient')
# Do: incoming email from a known partner on a Partners alias -> ok (+ test on alias.user_id)
self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': self.user_raoul_id, 'alias_contact': 'partners'})
@ -357,24 +357,24 @@ class TestMailgateway(TestMailBase):
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
res = self.mail_group.perm_read(cr, uid, [frog_group.id], details=False)
self.assertEqual(res[0].get('create_uid'), self.user_raoul_id,
'message_process: group should have been created by alias_user_id')
'message_process: group should have been created by alias_user_id')
# Test: one message that is the incoming email
self.assertEqual(len(frog_group.message_ids), 1,
'message_process: newly created group should have the incoming email in message_ids')
'message_process: newly created group should have the incoming email in message_ids')
msg = frog_group.message_ids[0]
# Test: message: author found
self.assertEqual(p1id, msg.author_id.id,
'message_process: message on created group should have Sylvie as author_id')
'message_process: message on created group should have Sylvie as author_id')
self.assertIn('Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>', msg.email_from,
'message_process: message on created group should have have an email_from')
'message_process: message on created group should have have an email_from')
# Test: author (not recipient and not Raoul (as alias owner)) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id]),
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
# Test: sent emails: no-one, no bounce effet
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 0,
'message_process: should not bounce incoming emails')
'message_process: should not bounce incoming emails')
# Data: unlink group
frog_group.unlink()
@ -387,7 +387,7 @@ class TestMailgateway(TestMailBase):
# Test: email bounced
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 1,
'message_process: incoming email on Partners alias should send a bounce email')
'message_process: incoming email on Partners alias should send a bounce email')
# Do: incoming email from a parent document follower on a Followers only alias -> ok
self._init_mock_build_email()
@ -398,15 +398,15 @@ class TestMailgateway(TestMailBase):
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one message that is the incoming email
self.assertEqual(len(frog_group.message_ids), 1,
'message_process: newly created group should have the incoming email in message_ids')
'message_process: newly created group should have the incoming email in message_ids')
# Test: author (and not recipient) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id]),
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
# Test: sent emails: no-one, no bounce effet
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 0,
'message_process: should not bounce incoming emails')
'message_process: should not bounce incoming emails')
# --------------------------------------------------
# Test2: update-like alias
@ -416,43 +416,43 @@ class TestMailgateway(TestMailBase):
self._init_mock_build_email()
self.mail_group.write(cr, uid, [frog_group.id], {'alias_name': 'frogs', 'alias_contact': 'followers', 'alias_force_thread_id': frog_group.id})
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
to='frogs@example.com>', subject='Re: news')
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
to='frogs@example.com>', subject='Re: news')
# Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject')
'message_process: reply on Frogs should not have created a new group with new subject')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
self.assertEqual(len(frog_groups), 1,
'message_process: reply on Frogs should not have created a duplicate group with old subject')
'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: email bounced
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 1,
'message_process: incoming email on Followers alias should send a bounce email')
'message_process: incoming email on Followers alias should send a bounce email')
self.assertIn('Re: news', sent_emails[0].get('subject'),
'message_process: bounce email on Followers alias should contain the original subject')
'message_process: bounce email on Followers alias should contain the original subject')
# Do: Pigs alias is restricted, should accept Followers
self._init_mock_build_email()
self.mail_group.message_subscribe(cr, uid, [frog_group.id], [p2id])
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>',
to='frogs@example.com>', subject='Re: cats')
msg_id='<1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>',
to='frogs@example.com>', subject='Re: cats')
# Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject')
'message_process: reply on Frogs should not have created a new group with new subject')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
self.assertEqual(len(frog_groups), 1,
'message_process: reply on Frogs should not have created a duplicate group with old subject')
'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one new message
self.assertEqual(len(frog_group.message_ids), 2, 'message_process: group should contain 2 messages after reply')
# Test: sent emails: 1 (Sylvie copy of the incoming email, but no bounce)
sent_emails = self._build_email_kwargs_list
self.assertEqual(len(sent_emails), 1,
'message_process: one email should have been generated')
'message_process: one email should have been generated')
self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to')[0],
'message_process: email should be sent to Sylvie')
'message_process: email should be sent to Sylvie')
self.mail_group.message_unsubscribe(cr, uid, [frog_group.id], [p2id])
# --------------------------------------------------
@ -461,40 +461,40 @@ class TestMailgateway(TestMailBase):
# Do: even with a wrong destination, a reply should end up in the correct thread
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
to='erroneous@example.com>', subject='Re: news',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
to='erroneous@example.com>', subject='Re: news',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
# Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject')
'message_process: reply on Frogs should not have created a new group with new subject')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
self.assertEqual(len(frog_groups), 1,
'message_process: reply on Frogs should not have created a duplicate group with old subject')
'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one new message
self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 2 messages after reply')
# Test: author (and not recipient) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id, p2id]),
'message_process: after reply, group should have 2 followers')
'message_process: after reply, group should have 2 followers')
# Do: due to some issue, same email goes back into the mailgateway
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
# Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject')
'message_process: reply on Frogs should not have created a new group with new subject')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
self.assertEqual(len(frog_groups), 1,
'message_process: reply on Frogs should not have created a duplicate group with old subject')
'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: no new message
self.assertEqual(len(frog_group.message_ids), 3, 'message_process: message with already existing message_id should not have been duplicated')
# Test: message_id is still unique
msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')])
self.assertEqual(len(msg_ids), 1,
'message_process: message with already existing message_id should not have been duplicated')
'message_process: message with already existing message_id should not have been duplicated')
# --------------------------------------------------
# Test4: email_from and partner finding
@ -505,28 +505,28 @@ class TestMailgateway(TestMailBase):
# Do: post a new message, with a known partner -> duplicate emails -> partner
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (2)',
msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
to='erroneous@example.com>', subject='Re: news (2)',
msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is A-Raoul (only existing)
self.assertEqual(frog_group.message_ids[0].author_id.id, extra_partner_id,
'message_process: email_from -> author_id wrong')
'message_process: email_from -> author_id wrong')
# Do: post a new message, with a known partner -> duplicate emails -> user
frog_group.message_unsubscribe([extra_partner_id])
raoul_email = self.user_raoul.email
self.res_users.write(cr, uid, self.user_raoul_id, {'email': 'test_raoul@email.com'})
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (3)',
msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
to='erroneous@example.com>', subject='Re: news (3)',
msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul
self.assertEqual(frog_group.message_ids[0].author_id.id, self.partner_raoul_id,
'message_process: email_from -> author_id wrong')
'message_process: email_from -> author_id wrong')
# Do: post a new message, with a known partner -> duplicate emails -> partner because is follower
frog_group.message_unsubscribe([self.partner_raoul_id])
@ -534,14 +534,14 @@ class TestMailgateway(TestMailBase):
raoul_email = self.user_raoul.email
self.res_users.write(cr, uid, self.user_raoul_id, {'email': 'test_raoul@email.com'})
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (3)',
msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
to='erroneous@example.com>', subject='Re: news (3)',
msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul
self.assertEqual(frog_group.message_ids[0].author_id.id, extra_partner_id,
'message_process: email_from -> author_id wrong')
'message_process: email_from -> author_id wrong')
self.res_users.write(cr, uid, self.user_raoul_id, {'email': raoul_email})
@ -551,37 +551,37 @@ class TestMailgateway(TestMailBase):
# Do: incoming email with model that does not accepts incoming emails must raise
self.assertRaises(AssertionError,
format_and_process,
MAIL_TEMPLATE,
to='noone@example.com', subject='spam', extra='', model='res.country',
msg_id='<1198923581.41972151344608186760.JavaMail.new4@agrolait.com>')
format_and_process,
MAIL_TEMPLATE,
to='noone@example.com', subject='spam', extra='', model='res.country',
msg_id='<1198923581.41972151344608186760.JavaMail.new4@agrolait.com>')
# Do: incoming email without model and without alias must raise
self.assertRaises(AssertionError,
format_and_process,
MAIL_TEMPLATE,
to='noone@example.com', subject='spam', extra='',
msg_id='<1198923581.41972151344608186760.JavaMail.new5@agrolait.com>')
format_and_process,
MAIL_TEMPLATE,
to='noone@example.com', subject='spam', extra='',
msg_id='<1198923581.41972151344608186760.JavaMail.new5@agrolait.com>')
# Do: incoming email with model that accepting incoming emails as fallback
frog_groups = format_and_process(MAIL_TEMPLATE,
to='noone@example.com',
subject='Spammy', extra='', model='mail.group',
msg_id='<1198923581.41972151344608186760.JavaMail.new6@agrolait.com>')
to='noone@example.com',
subject='Spammy', extra='', model='mail.group',
msg_id='<1198923581.41972151344608186760.JavaMail.new6@agrolait.com>')
self.assertEqual(len(frog_groups), 1,
'message_process: erroneous email but with a fallback model should have created a new mail.group')
'message_process: erroneous email but with a fallback model should have created a new mail.group')
# Do: incoming email in plaintext should be stored as html
frog_groups = format_and_process(MAIL_TEMPLATE_PLAINTEXT,
to='groups@example.com', subject='Frogs Return', extra='',
msg_id='<deadcafe.1337@smtp.agrolait.com>')
to='groups@example.com', subject='Frogs Return', extra='',
msg_id='<deadcafe.1337@smtp.agrolait.com>')
# Test: one group created with one message
self.assertEqual(len(frog_groups), 1, 'message_process: a new mail.group should have been created')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
msg = frog_group.message_ids[0]
# Test: plain text content should be wrapped and stored as html
self.assertIn('<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>', msg.body,
'message_process: plaintext incoming email incorrectly parsed')
'message_process: plaintext incoming email incorrectly parsed')
@mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm')
def test_20_thread_parent_resolution(self):
@ -602,26 +602,26 @@ class TestMailgateway(TestMailBase):
# Reply to msg1, make sure the reply is properly attached using the various reply identification mechanisms
# 0. Direct alias match
reply_msg1 = format(MAIL_TEMPLATE, to='Pretty Pigs <group+pigs@example.com>',
extra='In-Reply-To: %s' % msg1.message_id,
msg_id='<1198923581.41972151344608186760.JavaMail.2@agrolait.com>')
extra='In-Reply-To: %s' % msg1.message_id,
msg_id='<1198923581.41972151344608186760.JavaMail.2@agrolait.com>')
self.mail_group.message_process(cr, uid, None, reply_msg1)
# 1. In-Reply-To header
reply_msg2 = format(MAIL_TEMPLATE, to='erroneous@example.com',
extra='In-Reply-To: %s' % msg1.message_id,
msg_id='<1198923581.41972151344608186760.JavaMail.3@agrolait.com>')
extra='In-Reply-To: %s' % msg1.message_id,
msg_id='<1198923581.41972151344608186760.JavaMail.3@agrolait.com>')
self.mail_group.message_process(cr, uid, None, reply_msg2)
# 2. References header
reply_msg3 = format(MAIL_TEMPLATE, to='erroneous@example.com',
extra='References: <2233@a.com>\r\n\t<3edss_dsa@b.com> %s' % msg1.message_id,
msg_id='<1198923581.41972151344608186760.JavaMail.4@agrolait.com>')
extra='References: <2233@a.com>\r\n\t<3edss_dsa@b.com> %s' % msg1.message_id,
msg_id='<1198923581.41972151344608186760.JavaMail.4@agrolait.com>')
self.mail_group.message_process(cr, uid, None, reply_msg3)
# 3. Subject contains [<ID>] + model passed to message+process -> only attached to group, but not to mail (not in msg1.child_ids)
reply_msg4 = format(MAIL_TEMPLATE, to='erroneous@example.com',
extra='', subject='Re: [%s] 1' % self.group_pigs_id,
msg_id='<1198923581.41972151344608186760.JavaMail.5@agrolait.com>')
extra='', subject='Re: [%s] 1' % self.group_pigs_id,
msg_id='<1198923581.41972151344608186760.JavaMail.5@agrolait.com>')
self.mail_group.message_process(cr, uid, 'mail.group', reply_msg4)
group_pigs.refresh()
@ -633,12 +633,19 @@ class TestMailgateway(TestMailBase):
""" Testing private discussion between partners. """
cr, uid = self.cr, self.uid
def format(template, to='Pretty Pigs <group+pigs@example.com>, other@gmail.com', subject='Re: 1',
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>'):
return template.format(to=to, subject=subject, extra=extra, email_from=email_from, msg_id=msg_id)
# Do: Raoul writes to Bert and Administrator, with a thread_model in context that should not be taken into account
msg1_pids = [self.partner_admin_id, self.partner_bert_id]
msg1_id = self.mail_thread.message_post(cr, self.user_raoul_id, False,
partner_ids=msg1_pids,
subtype='mail.mt_comment',
context={'thread_model': 'mail.group'})
msg1_id = self.mail_thread.message_post(
cr, self.user_raoul_id, False,
partner_ids=msg1_pids,
subtype='mail.mt_comment',
context={'thread_model': 'mail.group'}
)
# Test: message recipients
msg = self.mail_message.browse(cr, uid, msg1_id)
@ -647,16 +654,26 @@ class TestMailgateway(TestMailBase):
test_pids = msg1_pids
test_nids = msg1_pids
self.assertEqual(set(msg_pids), set(test_pids),
'message_post: private discussion: incorrect recipients')
'message_post: private discussion: incorrect recipients')
self.assertEqual(set(msg_nids), set(test_nids),
'message_post: private discussion: incorrect notified recipients')
'message_post: private discussion: incorrect notified recipients')
self.assertEqual(msg.model, False,
'message_post: private discussion: context key "thread_model" not correctly ignored when having no res_id')
'message_post: private discussion: context key "thread_model" not correctly ignored when having no res_id')
# Test: message reply_to and message-id
self.assertFalse(msg.reply_to,
'message_post: private discussion: initial message should not have any reply_to specified')
self.assertIn('openerp-private', msg.message_id,
'message_post: private discussion: message-id should contain the private keyword')
# Do: Bert replies through mailgateway (is a customer)
msg2_id = self.mail_thread.message_post(cr, uid, False,
author_id=self.partner_bert_id,
parent_id=msg1_id, subtype='mail.mt_comment')
reply_message = format(MAIL_TEMPLATE, to='not_important@mydomain.com',
email_from='bert@bert.fr',
extra='In-Reply-To: %s' % msg.message_id,
msg_id='<test30.JavaMail.0@agrolait.com>')
self.mail_thread.message_process(cr, uid, None, reply_message)
# Test: last mail_message created
msg2_id = self.mail_message.search(cr, uid, [], limit=1)[0]
# Test: message recipients
msg = self.mail_message.browse(cr, uid, msg2_id)
@ -664,14 +681,32 @@ class TestMailgateway(TestMailBase):
msg_nids = [p.id for p in msg.notified_partner_ids]
test_pids = [self.partner_admin_id, self.partner_raoul_id]
test_nids = test_pids
self.assertEqual(msg.author_id.id, self.partner_bert_id,
'message_post: private discussion: wrong author through mailgatewya based on email')
self.assertEqual(set(msg_pids), set(test_pids),
'message_post: private discussion: incorrect recipients when replying')
'message_post: private discussion: incorrect recipients when replying')
self.assertEqual(set(msg_nids), set(test_nids),
'message_post: private discussion: incorrect notified recipients when replying')
'message_post: private discussion: incorrect notified recipients when replying')
# Do: Bert replies through chatter (is a customer)
msg3_id = self.mail_thread.message_post(
cr, uid, False,
author_id=self.partner_bert_id,
parent_id=msg1_id, subtype='mail.mt_comment')
# Test: message recipients
msg = self.mail_message.browse(cr, uid, msg3_id)
msg_pids = [p.id for p in msg.partner_ids]
msg_nids = [p.id for p in msg.notified_partner_ids]
test_pids = [self.partner_admin_id, self.partner_raoul_id]
test_nids = test_pids
self.assertEqual(set(msg_pids), set(test_pids),
'message_post: private discussion: incorrect recipients when replying')
self.assertEqual(set(msg_nids), set(test_nids),
'message_post: private discussion: incorrect notified recipients when replying')
# Do: Administrator replies
msg3_id = self.mail_thread.message_post(cr, uid, False,
parent_id=msg2_id, subtype='mail.mt_comment')
msg3_id = self.mail_thread.message_post(cr, uid, False, parent_id=msg3_id, subtype='mail.mt_comment')
# Test: message recipients
msg = self.mail_message.browse(cr, uid, msg3_id)
@ -680,6 +715,6 @@ class TestMailgateway(TestMailBase):
test_pids = [self.partner_bert_id, self.partner_raoul_id]
test_nids = test_pids
self.assertEqual(set(msg_pids), set(test_pids),
'message_post: private discussion: incorrect recipients when replying')
'message_post: private discussion: incorrect recipients when replying')
self.assertEqual(set(msg_nids), set(test_nids),
'message_post: private discussion: incorrect notified recipients when replying')
'message_post: private discussion: incorrect notified recipients when replying')

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-08-02 05:54+0000\n"
"Last-Translator: Joshua Jan(SHINEIT) <popkar77@gmail.com>\n"
"PO-Revision-Date: 2013-08-07 16:09+0000\n"
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\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: 2013-08-03 05:55+0000\n"
"X-Generator: Launchpad (build 16718)\n"
"X-Launchpad-Export-Date: 2013-08-08 04:39+0000\n"
"X-Generator: Launchpad (build 16723)\n"
#. module: mrp
#: help:mrp.config.settings,module_mrp_repair:0
@ -69,7 +69,7 @@ msgstr "周期数"
msgid ""
"The 'Minimum stock rule' allows the system to create procurement orders "
"automatically as soon as the minimum stock is reached."
msgstr "最小库存规则允许系统在达到最小库存数量的时候立即创建补货单"
msgstr "最小库存规则允许系统在达到最小库存数量的时会自动创建补货单"
#. module: mrp
#: code:addons/mrp/report/price.py:130
@ -490,6 +490,16 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 创建新属性\n"
" </p><p>\n"
" 当同一个产品有多种组成的方式,\n"
" OpenERP会根据属性来选择合适的BoM。\n"
" 你可以给每个物料清单分配若干个属性,\n"
" 当销售人员创建销售订单,根据需要指定几个属性,\n"
" 然后OpenERP 会根据其来自动选择相应的BoM。\n"
" </p>\n"
" "
#. module: mrp
#: view:mrp.production:0
@ -1629,6 +1639,17 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 点击创建属性组\n"
" </p><p>\n"
" 可以定义特定的属性组用来分配到BoM和销售订单。\n"
" 根据销售人员在销售订单上选取的属性OpenERP可以\n"
" 自动选择相应的BoM。\n"
" </p><p>\n"
" 例如,在属性组“保修” 你有两个属性1年保修3年保修。\n"
" 根据销售订单上的选择OpenERP会自动选择对应的BoM排单生产。\n"
" </p>\n"
" "
#. module: mrp
#: field:mrp.workcenter,capacity_per_cycle:0
@ -2191,7 +2212,7 @@ msgstr "产品类型是可库存或消耗品"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Production Started"
msgstr "生产开始了"
msgstr "已开始生产"
#. module: mrp
#: model:process.node,name:mrp.process_node_procureproducts0

284
addons/note/i18n/bs.po Normal file
View File

@ -0,0 +1,284 @@
# Bosnian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-08-06 16:51+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bosnian <bs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: note
#: field:note.note,memo:0
msgid "Note Content"
msgstr ""
#. module: note
#: view:note.stage:0
msgid "Stages of Notes"
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_04
#: model:note.stage,name:note.note_stage_02
msgid "This Week"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_base_config_settings
msgid "base.config.settings"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_note_tag
msgid "Note Tag"
msgstr ""
#. module: note
#: model:res.groups,name:note.group_note_fancy
msgid "Notes / Fancy mode"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_note_note
#: view:note.note:0
msgid "Note"
msgstr ""
#. module: note
#: view:note.note:0
msgid "Group By..."
msgstr ""
#. module: note
#: field:note.note,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: note
#: model:ir.actions.act_window,help:note.action_note_note
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to add a personal note.\n"
" </p><p>\n"
" Use notes to organize personal tasks or notes. All\n"
" notes are private; no one else will be able to see them. "
"However\n"
" you can share some notes with other people by inviting "
"followers\n"
" on the note. (Useful for meeting minutes, especially if\n"
" you activate the pad feature for collaborative writings).\n"
" </p><p>\n"
" You can customize how you process your notes/tasks by adding,\n"
" removing or modifying columns.\n"
" </p>\n"
" "
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_01
#: model:note.stage,name:note.note_stage_01
msgid "Today"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_res_users
msgid "Users"
msgstr ""
#. module: note
#: view:note.note:0
msgid "í"
msgstr ""
#. module: note
#: view:note.stage:0
msgid "Stage of Notes"
msgstr ""
#. module: note
#: field:note.note,message_unread:0
msgid "Unread Messages"
msgstr ""
#. module: note
#: field:note.note,current_partner_id:0
msgid "unknown"
msgstr ""
#. module: note
#: view:note.note:0
msgid "By sticky note Category"
msgstr ""
#. module: note
#: help:note.note,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: note
#: field:note.stage,name:0
msgid "Stage Name"
msgstr ""
#. module: note
#: field:note.note,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_02
msgid "Tomorrow"
msgstr ""
#. module: note
#: view:note.note:0
#: field:note.note,open:0
msgid "Active"
msgstr ""
#. module: note
#: help:note.stage,user_id:0
msgid "Owner of the note stage."
msgstr ""
#. module: note
#: model:ir.ui.menu,name:note.menu_notes_stage
msgid "Categories"
msgstr ""
#. module: note
#: view:note.note:0
#: field:note.note,stage_id:0
msgid "Stage"
msgstr ""
#. module: note
#: field:note.tag,name:0
msgid "Tag Name"
msgstr ""
#. module: note
#: field:note.note,message_ids:0
msgid "Messages"
msgstr ""
#. module: note
#: view:base.config.settings:0
#: model:ir.actions.act_window,name:note.action_note_note
#: model:ir.ui.menu,name:note.menu_note_notes
#: view:note.note:0
#: model:note.stage,name:note.note_stage_04
msgid "Notes"
msgstr ""
#. module: note
#: model:note.stage,name:note.demo_note_stage_03
#: model:note.stage,name:note.note_stage_03
msgid "Later"
msgstr ""
#. module: note
#: model:ir.model,name:note.model_note_stage
msgid "Note Stage"
msgstr ""
#. module: note
#: field:note.note,message_summary:0
msgid "Summary"
msgstr ""
#. module: note
#: field:note.note,stage_ids:0
msgid "Stages of Users"
msgstr ""
#. module: note
#: field:note.note,name:0
msgid "Note Summary"
msgstr ""
#. module: note
#: model:ir.actions.act_window,name:note.action_note_stage
#: view:note.note:0
msgid "Stages"
msgstr ""
#. module: note
#: help:note.note,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: note
#: view:note.note:0
msgid "Delete"
msgstr ""
#. module: note
#: field:note.note,color:0
msgid "Color Index"
msgstr ""
#. module: note
#: field:note.note,sequence:0
#: field:note.stage,sequence:0
msgid "Sequence"
msgstr ""
#. module: note
#: view:note.note:0
#: field:note.note,tag_ids:0
msgid "Tags"
msgstr ""
#. module: note
#: view:note.note:0
msgid "Archive"
msgstr ""
#. module: note
#: field:base.config.settings,module_note_pad:0
msgid "Use collaborative pads (etherpad)"
msgstr ""
#. module: note
#: help:note.note,message_summary:0
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: note
#: field:base.config.settings,group_note_fancy:0
msgid "Use fancy layouts for notes"
msgstr ""
#. module: note
#: field:note.note,current_partner_id:0
#: field:note.stage,user_id:0
msgid "Owner"
msgstr ""
#. module: note
#: help:note.stage,sequence:0
msgid "Used to order the note stages"
msgstr ""
#. module: note
#: field:note.note,date_done:0
msgid "Date done"
msgstr ""
#. module: note
#: field:note.stage,fold:0
msgid "Folded by Default"
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-07-26 07:07+0000\n"
"PO-Revision-Date: 2013-08-06 09:45+0000\n"
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\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: 2013-07-27 05:02+0000\n"
"X-Generator: Launchpad (build 16700)\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: point_of_sale
#: field:report.transaction.pos,product_nb:0
@ -42,6 +42,15 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 单击定义一个新的产品类别。\n"
" </p><p>\n"
" 产品类别用于通过触摸屏浏览产品。\n"
" </p><p>\n"
" "
"为产品类别上传图片后触摸屏布局将会自动调整。因此针对分辨率小于1024x768的显示设备我们建议不要为产品类别上传图片。\n"
" </p>\n"
" "
#. module: point_of_sale
#: view:pos.receipt:0
@ -285,7 +294,7 @@ msgstr "调试窗口"
#: code:addons/point_of_sale/static/src/xml/pos.xml:613
#, python-format
msgid "Change:"
msgstr "零钞"
msgstr "找零:"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.coca_regular_2l_product_template
@ -739,6 +748,8 @@ msgid ""
"use\n"
" a modern browser like"
msgstr ""
"销售点功能不支持 Microsoft Internet Explorer 浏览器请使用更现代化的浏览器如Mozilla Firefox 和 "
"Google Chrome 等"
#. module: point_of_sale
#: view:pos.session.opening:0
@ -934,7 +945,7 @@ msgstr "付款合计"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_session_opening
msgid "pos.session.opening"
msgstr ""
msgstr "pos.session.opening"
#. module: point_of_sale
#: view:res.users:0
@ -1077,7 +1088,7 @@ msgstr "期初余额"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.lays_naturel_oven_150g_product_template
msgid "Oven Baked Lays Natural 150g"
msgstr ""
msgstr "Oven Baked Lays Natural 150g"
#. module: point_of_sale
#: sql_constraint:pos.session:0
@ -1142,7 +1153,7 @@ msgstr "(更新)"
#. module: point_of_sale
#: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template
msgid "IJsboerke Vanilla 2.5L"
msgstr ""
msgstr "IJsboerke Vanilla 2.5L"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details
@ -1161,7 +1172,7 @@ msgstr "2L 依云"
#: code:addons/point_of_sale/wizard/pos_session_opening.py:33
#, python-format
msgid "Start Point Of Sale"
msgstr ""
msgstr "启动销售点"
#. module: point_of_sale
#: model:pos.category,name:point_of_sale.pils
@ -3420,7 +3431,7 @@ msgstr "销售明细"
#: view:res.partner:0
#: view:res.users:0
msgid "Point of Sale"
msgstr "POS"
msgstr "销售点"
#. module: point_of_sale
#: view:pos.order:0

View File

@ -0,0 +1,546 @@
# Bosnian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-08-06 08:35+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bosnian <bs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,type:0
msgid "Lead"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,title:0
msgid "Title"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,probability:0
msgid "Success Rate (%)"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Contact us"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action:0
msgid "Next Action Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,fax:0
msgid "Fax"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,zip:0
msgid "Zip"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_unread:0
msgid "Unread Messages"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_id:0
msgid "Company"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,day_open:0
msgid "Days to Open"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Thank you for your interest, we'll respond to your request shortly."
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Highest"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,mobile:0
msgid "Mobile"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,description:0
msgid "Notes"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_ids:0
msgid "Messages"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,color:0
msgid "Color Index"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_latitude:0
msgid "Geo Latitude"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_name:0
msgid "Customer Name"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "Cancelled"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,channel_id:0
msgid "Communication channel (mail, direct, phone, ...)"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,type_id:0
msgid "Campaign"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,ref:0
msgid "Reference"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action_next:0
#: field:portal_crm.crm_contact_us,title_action:0
msgid "Next Action"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_summary:0
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_id:0
msgid "Partner"
msgstr ""
#. module: portal_crm
#: model:ir.actions.act_window,name:portal_crm.action_contact_us
msgid "Contact Us"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,name:0
msgid "Subject"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,opt_out:0
msgid "Opt-Out"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,priority:0
msgid "Priority"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,state_id:0
msgid "State"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_id:0
msgid "Linked partner (optional). Usually created when converting the lead."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,payment_mode:0
msgid "Payment Mode"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "New"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,type:0
msgid "Type"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,email_from:0
msgid "Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,channel_id:0
msgid "Channel"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Name"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Lowest"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,create_date:0
msgid "Creation Date"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Close"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "Pending"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,type:0
msgid "Type is used to separate Leads and Opportunities"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,categ_ids:0
msgid "Categories"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,stage_id:0
msgid "Stage"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_login:0
msgid "User Login"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,opt_out:0
msgid ""
"If opt-out is checked, this contact has refused to receive emails or "
"unsubscribed to a campaign."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,contact_name:0
msgid "Contact Name"
msgstr ""
#. module: portal_crm
#: model:ir.ui.menu,name:portal_crm.portal_company_contact
msgid "Contact"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_address_email:0
msgid "Partner Contact Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,planned_revenue:0
msgid "Expected Revenue"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,task_ids:0
msgid "Tasks"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Contact form"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_currency:0
msgid "Currency"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,write_date:0
msgid "Update Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_deadline:0
msgid "Expected Closing"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,ref2:0
msgid "Reference 2"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_email:0
msgid "User Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_open:0
msgid "Opened"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "In Progress"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_name:0
msgid ""
"The name of the future partner company that will be created while converting "
"the lead into opportunity"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,planned_cost:0
msgid "Planned Costs"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,date_deadline:0
msgid "Estimate of the date on which the opportunity will be won."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,email_cc:0
msgid ""
"These email addresses will be added to the CC field of all inbound and "
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Low"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_closed:0
#: selection:portal_crm.crm_contact_us,state:0
msgid "Closed"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_assign:0
msgid "Assignation Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,state:0
msgid "Status"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Normal"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,email_cc:0
msgid "Global CC"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,street2:0
msgid "Street2"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,id:0
msgid "ID"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,phone:0
msgid "Phone"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,active:0
msgid "Active"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_id:0
msgid "Salesperson"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,day_close:0
msgid "Days to Close"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_ids:0
msgid "Companies"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_summary:0
msgid "Summary"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,section_id:0
msgid ""
"When sending mails, the default email address is taken from the sales team."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_address_name:0
msgid "Partner Contact Name"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_longitude:0
msgid "Geo Longitude"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,date_assign:0
msgid "Last date this case was forwarded/assigned to a partner"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,email_from:0
msgid "Email address of the contact"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,city:0
msgid "City"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Submit"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,function:0
msgid "Function"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,referred:0
msgid "Referred By"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_assigned_id:0
msgid "Assigned Partner"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,type:0
msgid "Opportunity"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_assigned_id:0
msgid "Partner this case has been forwarded/assigned to."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,country_id:0
msgid "Country"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Thank you"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,state:0
msgid ""
"The Status is set to 'Draft', when a case is created. If the case is in "
"progress the Status is set to 'Open'. When the case is over, the Status is "
"set to 'Done'. If the case needs to be reviewed then the Status is set to "
"'Pending'."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,type_id:0
msgid ""
"From which campaign (seminar, marketing campaign, mass mailing, ...) did "
"this contact come from?"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "High"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,section_id:0
msgid "Sales Team"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,street:0
msgid "Street"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action_last:0
msgid "Last Action"
msgstr ""
#. module: portal_crm
#: model:ir.model,name:portal_crm.model_portal_crm_crm_contact_us
msgid "Contact form for the portal"
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-07-14 04:15+0000\n"
"Last-Translator: Alan <shuchuan.wu@gmail.com>\n"
"PO-Revision-Date: 2013-08-06 09:36+0000\n"
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\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: 2013-07-15 04:51+0000\n"
"X-Generator: Launchpad (build 16696)\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: project
#: view:project.project:0
@ -749,7 +749,7 @@ msgstr "待处理任务草稿"
#. module: project
#: field:project.project,alias_model:0
msgid "Alias Model"
msgstr ""
msgstr "别名模型"
#. module: project
#: help:report.project.task.user,closing_days:0
@ -854,7 +854,7 @@ msgstr "增加筛选条件"
#. module: project
#: model:ir.ui.menu,name:project.menu_tasks_config
msgid "GTD"
msgstr ""
msgstr "GTD"
#. module: project
#: help:project.task,state:0
@ -1214,7 +1214,7 @@ msgstr "%s (副本)"
#. module: project
#: model:mail.message.subtype,name:project.mt_project_task_stage
msgid "Task Stage Changed"
msgstr ""
msgstr "任务阶段已改变"
#. module: project
#: view:project.task:0
@ -1706,6 +1706,12 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 单击创建新任务。\n"
" </p><p>\n"
"OpenERP 系统的任务管理允许你为了更高效地完成工作而管理任务管道。你可以跟踪任务进度、与他人讨论任务、附加文档附件等。\n"
" </p>\n"
" "
#. module: project
#: field:project.task,date_end:0
@ -2013,7 +2019,7 @@ msgstr "准备好下一个阶段"
#. module: project
#: field:project.task.type,case_default:0
msgid "Default for New Projects"
msgstr ""
msgstr "默认用于新项目"
#. module: project
#: view:project.task:0
@ -2051,6 +2057,8 @@ msgid ""
"resource allocation.\n"
" This installs the module project_long_term."
msgstr ""
"用于长期项目管理的模块,能够跟踪计划、排程和资源控制。\n"
" 将会安装模块“project_long_term”。"
#. module: project
#: model:mail.message.subtype,description:project.mt_task_closed
@ -2083,6 +2091,8 @@ msgid ""
"Provides timesheet support for the issues/bugs management in project.\n"
" This installs the module project_issue_sheet."
msgstr ""
"为项目中的问题/错误管理提供时间表支持。\n"
" 将安装模块“project_issue_sheet”。"
#. module: project
#: selection:project.project,privacy_visibility:0

View File

@ -0,0 +1,984 @@
# Bosnian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-08-06 17:46+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bosnian <bs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: project_issue
#: model:project.category,name:project_issue.project_issue_category_03
msgid "Deadly bug"
msgstr "Ubojita greška"
#. module: project_issue
#: help:project.config.settings,fetchmail_issue:0
msgid ""
"Allows you to configure your incoming mail server, and create issues from "
"incoming emails."
msgstr ""
#. module: project_issue
#: field:project.issue.report,delay_open:0
msgid "Avg. Delay to Open"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: view:project.issue.report:0
msgid "Group By..."
msgstr ""
#. module: project_issue
#: field:project.issue,working_hours_open:0
msgid "Working Hours to Open the Issue"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,description:project_issue.mt_issue_started
msgid "Issue started"
msgstr ""
#. module: project_issue
#: field:project.issue,date_open:0
msgid "Opened"
msgstr ""
#. module: project_issue
#: field:project.issue.report,opening_date:0
msgid "Date of Opening"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "March"
msgstr ""
#. module: project_issue
#: field:project.issue,progress:0
msgid "Progress (%)"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,message_unread:0
msgid "Unread Messages"
msgstr ""
#. module: project_issue
#: field:project.issue,company_id:0
#: view:project.issue.report:0
#: field:project.issue.report,company_id:0
msgid "Company"
msgstr ""
#. module: project_issue
#: field:project.issue,email_cc:0
msgid "Watchers Emails"
msgstr ""
#. module: project_issue
#: help:project.issue,kanban_state:0
msgid ""
"A Issue's kanban state indicates special situations affecting it:\n"
" * Normal is the default situation\n"
" * Blocked indicates something is preventing the progress of this issue\n"
" * Ready for next stage indicates the issue is ready to be pulled to the "
"next stage"
msgstr ""
#. module: project_issue
#: help:project.issue,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: project_issue
#: help:account.analytic.account,use_issues:0
msgid "Check this field if this project manages issues"
msgstr ""
#. module: project_issue
#: field:project.issue,day_open:0
msgid "Days to Open"
msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:479
#, python-format
msgid ""
"You cannot escalate this issue.\n"
"The relevant Project has not configured the Escalation Project!"
msgstr ""
#. module: project_issue
#: constraint:project.project:0
msgid "Error! You cannot assign escalation to the same project!"
msgstr ""
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
msgid "Highest"
msgstr ""
#. module: project_issue
#: help:project.issue,inactivity_days:0
msgid "Difference in days between last action and current date"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
#: field:project.issue.report,day:0
msgid "Day"
msgstr ""
#. module: project_issue
#: field:project.issue,days_since_creation:0
msgid "Days since creation date"
msgstr ""
#. module: project_issue
#: field:project.issue,task_id:0
#: view:project.issue.report:0
#: field:project.issue.report,task_id:0
msgid "Task"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,name:project_issue.mt_project_issue_stage
msgid "Issue Stage Changed"
msgstr ""
#. module: project_issue
#: field:project.issue,message_ids:0
msgid "Messages"
msgstr ""
#. module: project_issue
#: field:project.issue,inactivity_days:0
msgid "Days since last action"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_project_project
#: view:project.issue:0
#: field:project.issue,project_id:0
#: view:project.issue.report:0
#: field:project.issue.report,project_id:0
msgid "Project"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,help:project_issue.project_issue_categ_act0
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to report a new issue.\n"
" </p><p>\n"
" The OpenERP issues tacker allows you to efficiantly manage "
"things\n"
" like internal requests, software development bugs, customer\n"
" complaints, project troubles, material breakdowns, etc.\n"
" </p>\n"
" "
msgstr ""
#. module: project_issue
#: selection:project.issue,state:0
#: selection:project.issue.report,state:0
msgid "Cancelled"
msgstr ""
#. module: project_issue
#: field:project.issue,description:0
msgid "Private Note"
msgstr ""
#. module: project_issue
#: field:project.issue.report,date_closed:0
msgid "Date of Closing"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Issue Tracker Search"
msgstr ""
#. module: project_issue
#: field:project.issue,color:0
msgid "Color Index"
msgstr ""
#. module: project_issue
#: field:project.issue.report,working_hours_open:0
msgid "Avg. Working Hours to Open"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_account_analytic_account
msgid "Analytic Account"
msgstr ""
#. module: project_issue
#: help:project.issue,message_summary:0
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: project_issue
#: help:project.project,project_escalation_id:0
msgid ""
"If any issue is escalated from the current Project, it will be listed under "
"the project selected here."
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Extra Info"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,help:project_issue.action_project_issue_report
msgid ""
"This report on the project issues allows you to analyse the quality of your "
"support or after-sales services. You can track the issues per age. You can "
"analyse the time required to open or close an issue, the number of email to "
"exchange and the time spent on average by issues."
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Edit..."
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Responsible"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Statistics"
msgstr ""
#. module: project_issue
#: field:project.issue,kanban_state:0
msgid "Kanban State"
msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:366
#, python-format
msgid "Project issue <b>converted</b> to task."
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,priority:0
#: view:project.issue.report:0
#: field:project.issue.report,priority:0
msgid "Priority"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,version_id:0
#: view:project.issue.report:0
#: field:project.issue.report,version_id:0
msgid "Version"
msgstr ""
#. module: project_issue
#: field:project.issue,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: selection:project.issue,state:0
#: view:project.issue.report:0
msgid "New"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,name:project_issue.project_issue_categ_action
msgid "Issue Categories"
msgstr ""
#. module: project_issue
#: field:project.issue,email_from:0
msgid "Email"
msgstr ""
#. module: project_issue
#: field:project.issue,channel_id:0
#: field:project.issue.report,channel_id:0
msgid "Channel"
msgstr ""
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
msgid "Lowest"
msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:388
#, python-format
msgid "%s (copy)"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Unassigned Issues"
msgstr ""
#. module: project_issue
#: field:project.issue,create_date:0
#: view:project.issue.report:0
#: field:project.issue.report,creation_date:0
msgid "Creation Date"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,name:project_issue.project_issue_version_action
#: model:ir.ui.menu,name:project_issue.menu_project_issue_version_act
msgid "Versions"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "To Do Issues"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_project_issue_version
msgid "project.issue.version"
msgstr ""
#. module: project_issue
#: field:project.config.settings,fetchmail_issue:0
msgid "Create issues from an incoming email account "
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: selection:project.issue,state:0
#: view:project.issue.report:0
msgid "Done"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "July"
msgstr ""
#. module: project_issue
#: model:ir.ui.menu,name:project_issue.menu_project_issue_category_act
msgid "Categories"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,stage_id:0
#: view:project.issue.report:0
#: field:project.issue.report,stage_id:0
msgid "Stage"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
#: view:project.issue.report:0
msgid "Issues Analysis"
msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:516
#, python-format
msgid "No Subject"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,name:project_issue.action_view_my_project_issue_tree
msgid "My Project Issues"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,partner_id:0
#: view:project.issue.report:0
#: field:project.issue.report,partner_id:0
msgid "Contact"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Delete"
msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:371
#, python-format
msgid "Tasks"
msgstr ""
#. module: project_issue
#: field:project.issue.report,nbr:0
msgid "# of Issues"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "September"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "December"
msgstr ""
#. module: project_issue
#: field:project.issue,categ_ids:0
msgid "Tags"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Issue Tracker Tree"
msgstr ""
#. module: project_issue
#: model:project.category,name:project_issue.project_issue_category_01
msgid "Little problem"
msgstr ""
#. module: project_issue
#: view:project.project:0
msgid "creates"
msgstr ""
#. module: project_issue
#: model:crm.case.categ,name:project_issue.feature_request_categ
msgid "Feature Requests"
msgstr ""
#. module: project_issue
#: field:project.issue,write_date:0
msgid "Update Date"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Project:"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Open Features"
msgstr ""
#. module: project_issue
#: field:project.issue,date_action_next:0
msgid "Next Action"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: selection:project.issue,kanban_state:0
msgid "Blocked"
msgstr ""
#. module: project_issue
#: field:project.issue,user_email:0
msgid "User Email"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
msgid "#Number of Project Issues"
msgstr ""
#. module: project_issue
#: help:project.issue,channel_id:0
msgid "Communication channel."
msgstr ""
#. module: project_issue
#: help:project.issue,email_cc:0
msgid ""
"These email addresses will be added to the CC field of all inbound and "
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
#. module: project_issue
#: model:crm.case.categ,name:project_issue.bug_categ
msgid "Maintenance"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,state:0
msgid "Draft"
msgstr ""
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
msgid "Low"
msgstr ""
#. module: project_issue
#: field:project.issue,date_closed:0
#: selection:project.issue.report,state:0
msgid "Closed"
msgstr ""
#. module: project_issue
#: field:project.issue.report,delay_close:0
msgid "Avg. Delay to Close"
msgstr ""
#. module: project_issue
#: selection:project.issue,state:0
#: view:project.issue.report:0
#: selection:project.issue.report,state:0
msgid "Pending"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,state:0
#: field:project.issue.report,state:0
msgid "Status"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
msgid "#Project Issues"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "August"
msgstr ""
#. module: project_issue
#: selection:project.issue,kanban_state:0
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
msgid "Normal"
msgstr ""
#. module: project_issue
#: field:project.project,issue_count:0
msgid "unknown"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Category:"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "June"
msgstr ""
#. module: project_issue
#: help:project.issue,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "New Issues"
msgstr ""
#. module: project_issue
#: field:project.issue,day_close:0
msgid "Days to Close"
msgstr ""
#. module: project_issue
#: field:project.issue,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: project_issue
#: help:project.issue,state:0
msgid ""
"The status is set to 'Draft', when a case is created. "
"If the case is in progress the status is set to 'Open'. "
"When the case is over, the status is set to 'Done'. If "
"the case needs to be reviewed then the status is set "
"to 'Pending'."
msgstr ""
#. module: project_issue
#: field:project.issue,active:0
#: field:project.issue.version,active:0
msgid "Active"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "November"
msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:479
#, python-format
msgid "Warning!"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
msgid "Search"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "October"
msgstr ""
#. module: project_issue
#: help:project.issue,days_since_creation:0
msgid "Difference in days between creation date and current date"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "January"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Feature Tracker Tree"
msgstr ""
#. module: project_issue
#: help:project.issue,email_from:0
msgid "These people will receive email."
msgstr ""
#. module: project_issue
#: field:project.issue,message_summary:0
msgid "Summary"
msgstr ""
#. module: project_issue
#: field:project.issue,date:0
msgid "Date"
msgstr ""
#. module: project_issue
#: field:project.issue,user_id:0
#: view:project.issue.report:0
#: field:project.issue.report,user_id:0
msgid "Assigned to"
msgstr ""
#. module: project_issue
#: view:project.config.settings:0
msgid "Configure"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,description:project_issue.mt_issue_closed
msgid "Issue closed"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Current Features"
msgstr ""
#. module: project_issue
#: view:project.issue.version:0
msgid "Issue Version"
msgstr ""
#. module: project_issue
#: field:project.issue.version,name:0
msgid "Version Number"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Cancel"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,state:0
msgid "Open"
msgstr ""
#. module: project_issue
#: field:account.analytic.account,use_issues:0
#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all
#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0
#: model:ir.ui.menu,name:project_issue.menu_project_confi
#: model:ir.ui.menu,name:project_issue.menu_project_issue_track
#: view:project.issue:0
#: view:project.project:0
msgid "Issues"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: selection:project.issue,state:0
msgid "In Progress"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: view:project.issue.report:0
msgid "To Do"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_project_issue
#: view:project.issue.report:0
msgid "Project Issue"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Creation Month"
msgstr ""
#. module: project_issue
#: help:project.issue,progress:0
msgid "Computed as: Time Spent / Total Time."
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: selection:project.issue,kanban_state:0
msgid "Ready for next stage"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
#: field:project.issue.report,section_id:0
msgid "Sale Team"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: view:project.issue.report:0
#: field:project.issue.report,month:0
msgid "Month"
msgstr ""
#. module: project_issue
#: view:project.issue:0
#: field:project.issue,name:0
#: view:project.project:0
msgid "Issue"
msgstr ""
#. module: project_issue
#: model:project.category,name:project_issue.project_issue_category_02
msgid "PBCK"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Feature Tracker Search"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Description"
msgstr ""
#. module: project_issue
#: field:project.issue,section_id:0
msgid "Sales Team"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "May"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_project_config_settings
msgid "project.config.settings"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,name:project_issue.mt_issue_closed
#: model:mail.message.subtype,name:project_issue.mt_project_issue_closed
msgid "Issue Closed"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
#: field:project.issue.report,email:0
msgid "# Emails"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,name:project_issue.mt_issue_new
#: model:mail.message.subtype,name:project_issue.mt_project_issue_new
msgid "Issue Created"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,name:project_issue.mt_issue_blocked
#: model:mail.message.subtype,name:project_issue.mt_project_issue_blocked
msgid "Issue Blocked"
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "February"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,description:project_issue.mt_issue_stage
#: model:mail.message.subtype,description:project_issue.mt_project_issue_stage
msgid "Stage changed"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "Feature description"
msgstr ""
#. module: project_issue
#: field:project.project,project_escalation_id:0
msgid "Project Escalation"
msgstr ""
#. module: project_issue
#: model:ir.actions.act_window,help:project_issue.project_issue_version_action
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to add a new version.\n"
" </p><p>\n"
" Define here the different versions of your products on "
"which\n"
" you can work on issues.\n"
" </p>\n"
" "
msgstr ""
#. module: project_issue
#: help:project.issue,section_id:0
msgid ""
"Sales team to which Case belongs to. Define "
"Responsible user and Email account for mail gateway."
msgstr ""
#. module: project_issue
#: view:board.board:0
msgid "My Issues"
msgstr ""
#. module: project_issue
#: help:project.issue.report,delay_open:0
msgid "Number of Days to open the project issue."
msgstr ""
#. module: project_issue
#: selection:project.issue.report,month:0
msgid "April"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "⇒ Escalate"
msgstr ""
#. module: project_issue
#: view:project.issue:0
msgid "References"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,description:project_issue.mt_issue_new
msgid "Issue created"
msgstr ""
#. module: project_issue
#: field:project.issue,working_hours_close:0
msgid "Working Hours to Close the Issue"
msgstr ""
#. module: project_issue
#: field:project.issue,id:0
msgid "ID"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,description:project_issue.mt_issue_blocked
msgid "Issue blocked"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_project_issue_report
msgid "project.issue.report"
msgstr ""
#. module: project_issue
#: help:project.issue.report,delay_close:0
msgid "Number of Days to close the project issue"
msgstr ""
#. module: project_issue
#: field:project.issue.report,working_hours_close:0
msgid "Avg. Working Hours to Close"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,name:project_issue.mt_issue_stage
msgid "Stage Changed"
msgstr ""
#. module: project_issue
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
msgid "High"
msgstr ""
#. module: project_issue
#: field:project.issue,date_deadline:0
msgid "Deadline"
msgstr ""
#. module: project_issue
#: field:project.issue,date_action_last:0
msgid "Last Action"
msgstr ""
#. module: project_issue
#: view:project.issue.report:0
#: field:project.issue.report,name:0
msgid "Year"
msgstr ""
#. module: project_issue
#: field:project.issue,duration:0
msgid "Duration"
msgstr ""
#. module: project_issue
#: model:mail.message.subtype,name:project_issue.mt_issue_started
#: model:mail.message.subtype,name:project_issue.mt_project_issue_started
msgid "Issue Started"
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-07-27 18:34+0000\n"
"PO-Revision-Date: 2013-08-06 09:26+0000\n"
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\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: 2013-07-28 05:54+0000\n"
"X-Generator: Launchpad (build 16700)\n"
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
"X-Generator: Launchpad (build 16721)\n"
#. module: stock
#: field:stock.inventory.line.split,line_exist_ids:0
@ -1432,6 +1432,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 创建一个新的凭证。\n"
" </p><p>\n"
" 根据所执行操作的类型 或者 工人/团队 将要执行的操作,库存凭证系统允许你指定每个库存操作对应到指定的凭证。\n"
" 例如库存凭证可以是:质量控制,分拣单,包装 等等。\n"
" </p>\n"
" "
#. module: stock
#: help:stock.location,chained_auto_packing:0
@ -2332,7 +2339,7 @@ msgstr "供货商库位"
#. module: stock
#: view:stock.location.product:0
msgid "View Products Inventory"
msgstr "查看产品存货清单"
msgstr "查看产品存"
#. module: stock
#: view:stock.move:0
@ -2415,6 +2422,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 创建一个库存移库单。\n"
" </p><p>\n"
" 此菜单给你在一个特定产品上面的库存操作的完整的可追溯性。\n"
" 你能过滤该产品,查看该产品所有已经发生和未发生的移库。\n"
" </p>\n"
" "
#. module: stock
#: view:stock.location:0
@ -2989,6 +3003,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 添加一个库位。\n"
" </p><p>\n"
" 这是你的公司的仓库和库位的结构。\n"
" 您能点击一个库位,获得产品的清单,和它们在每个库位及其子库位中的库存情况。\n"
" </p>\n"
" "
#. module: stock
#: field:stock.location,stock_real:0
@ -3151,6 +3172,10 @@ msgid ""
"needs, etc.\n"
" This installs the module stock_location."
msgstr ""
"提供推送物流。这个特性的典型使用是:\n"
" 管理产品的生产链,管理每个产品的默认库位,,\n"
" 根据业务需要定义仓库的内路线等等。\n"
"这需要安装模块 stock_location 。"
#. module: stock
#: view:stock.inventory:0
@ -3212,6 +3237,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 添加一个追踪号码。\n"
" </p><p>\n"
" 这是所有包装的一个列表。当你选择了一个包装,你\n"
" 能获得包含在这个包装中的产品的上下游的可追踪性。\n"
" </p>\n"
" "
#. module: stock
#: code:addons/stock/stock.py:2501
@ -3381,6 +3413,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 单击开始一次盘点。\n"
" </p><p>\n"
" "
"定期盘点通常用于清点每个库位的商品数量。你可以每年定期使用本功能一次来做总体盘点,也可以在任何你需要的时候进行以便符合当前某个产品的存量级别。\n"
" </p>\n"
" "
#. module: stock
#: view:stock.return.picking:0
@ -3540,7 +3579,7 @@ msgstr "货架 1"
#: help:stock.picking.in,date:0
#: help:stock.picking.out,date:0
msgid "Creation time, usually the time of the order."
msgstr ""
msgstr "创建时间,通常是下单的时间。"
#. module: stock
#: field:stock.tracking,name:0
@ -3981,7 +4020,7 @@ msgstr "关注者"
#: code:addons/stock/stock.py:2590
#, python-format
msgid "Cannot consume a move with negative or zero quantity."
msgstr ""
msgstr "消耗的移库数量不能小于等于0。"
#. module: stock
#: help:stock.config.settings,decimal_precision:0
@ -4068,6 +4107,8 @@ msgid ""
" to be invoiced when you send or deliver goods.\n"
" This installs the module stock_invoice_directly."
msgstr ""
"当您发送或交付货物,如果交付要开票,将能自动运行开票向导。\n"
"这需要安装模块 stock_invoice_directly。"
#. module: stock
#: field:stock.location,chained_journal_id:0
@ -4423,7 +4464,7 @@ msgid ""
"This allows you to manage products by using serial numbers. When you select "
"a serial number on product moves, you can get the upstream or downstream "
"traceability of that product."
msgstr ""
msgstr "允许你使用序列号管理产品。当你在产品移库时选择了一个序列号,你能获得对产品的上游和下游的可追溯性。"
#. module: stock
#: code:addons/stock/wizard/stock_fill_inventory.py:124
@ -4482,6 +4523,12 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" 单击新增一个产品的发货单。\n"
" </p><p>\n"
" 你在此处会发现该产品相关的所有调拨历史,以及所有你需要发货给客户的产品。\n"
" </p>\n"
" "
#. module: stock
#: model:ir.actions.act_window,name:stock.action_location_form