[tryton-debian-vcs] tryton-server branch debian updated. debian/4.4.4-1-11-g4852dc4
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Fri Nov 10 12:25:09 UTC 2017
The following commit has been merged in the debian branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-server.git;a=commitdiff;h=debian/4.4.4-1-11-g4852dc4
commit 4852dc4094491618eb8259c4e66c85fa3e91d585
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Nov 7 16:22:46 2017 +0100
Releasing debian version 4.6.0-1.
Signed-off-by: Mathias Behrle <mathiasb at m9s.biz>
diff --git a/debian/NEWS b/debian/NEWS
index d59f88e..222d205 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -16,7 +16,7 @@ tryton-server (4.6.0-1) unstable; urgency=medium
$ sudo service tryton-server restart
$ sudo service tryton-server-cron restart
- -- Mathias Behrle <mathiasb at m9s.biz> Mon, 06 Nov 2017 15:31:18 +0100
+ -- Mathias Behrle <mathiasb at m9s.biz> Tue, 07 Nov 2017 10:20:49 +0100
tryton-server (4.4.1-1) unstable; urgency=medium
diff --git a/debian/changelog b/debian/changelog
index 3e76cd2..d449db6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
+tryton-server (4.6.0-1) unstable; urgency=medium
+
+ * Bump the Standards-Version to 4.1.1, no changes needed.
+ * Merging upstream version 4.6.0.
+ * Refresh patches.
+ * Updating debian/manpages.
+ * Prepare the NEWS for 4.6.0.
+ * Remove superseded BD on dh_systemd.
+ * Add 02_avoid_call_to_pypi.patch.
+ * Add versioned dependency for relatorio to be safe with respect to BD
+ python-magic.
+ * Correcting a typo in a man page.
+ * Use https in the watch file.
+
+ -- Mathias Behrle <mathiasb at m9s.biz> Tue, 07 Nov 2017 10:20:49 +0100
+
tryton-server (4.4.4-1) unstable; urgency=medium
* Bump the Standards-Version to 4.1.0, no changes needed.
commit 5aee2043a4cbf8c03f79bb50c4f6b2a4c7525e56
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Nov 7 10:16:46 2017 +0100
Use https in the watch file.
diff --git a/debian/watch b/debian/watch
index 79e77ca..e706f95 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,2 +1,2 @@
version=3
-opts=pgpsigurlmangle=s/$/.asc/ http://downloads.tryton.org/current/ .*trytond-(\d.*)\.(?:tgz|tbz2|txz|tar\.(?:gz|bz2|xz))
+opts=pgpsigurlmangle=s/$/.asc/ https://downloads.tryton.org/current/ .*trytond-(\d.*)\.(?:tgz|tbz2|txz|tar\.(?:gz|bz2|xz))
commit c89ebd9dd8143b54e38524971f34ff87e6ad7abb
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 18:27:15 2017 +0100
Correcting a typo.
diff --git a/debian/manpages/trytond-admin.1 b/debian/manpages/trytond-admin.1
index fc483ff..a1f4bfb 100644
--- a/debian/manpages/trytond-admin.1
+++ b/debian/manpages/trytond-admin.1
@@ -1,6 +1,6 @@
.TH TRYTOND-ADMIN 1 "2017\-11\-06" "4.6" "Tryton Application Platform"
.SH NAME
-trytond-admin \- Tryton Application Platform (Database Adminstration)
+trytond-admin \- Tryton Application Platform (Database Administration)
.SH SYNOPSIS
\fBtrytond-admin\fR
.SH DESCRIPTION
commit 2f9fdbfc3da73780a0c232d1a588ee00d7028aca
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 18:24:56 2017 +0100
Add versioned dependency for relatorio to be safe with respect to BD
python-magic.
diff --git a/debian/control b/debian/control
index c771494..db5e10d 100644
--- a/debian/control
+++ b/debian/control
@@ -12,7 +12,7 @@ Build-Depends:
python3-lxml,
python3-mock,
python3-polib,
- python3-relatorio,
+ python3-relatorio (>= 0.7),
python3-setuptools,
python3-sphinx,
python3-sql,
@@ -33,7 +33,7 @@ Depends:
python3-lxml,
python3-pkg-resources,
python3-polib,
- python3-relatorio,
+ python3-relatorio (>= 0.7),
python3-sql,
python3-werkzeug,
python3-wrapt,
commit 826ab4852e699f8c35ebd0f9c76a32c4531c50d9
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 18:23:22 2017 +0100
Add 02_avoid_call_to_pypi.patch.
diff --git a/debian/patches/02_avoid_call_to_pypi.patch b/debian/patches/02_avoid_call_to_pypi.patch
new file mode 100644
index 0000000..1406f57
--- /dev/null
+++ b/debian/patches/02_avoid_call_to_pypi.patch
@@ -0,0 +1,25 @@
+Description: Avoid the call for python-magic to PyPi.
+ The Build-Dependency relatorio >=0.7 contains a code copy of
+ python-magic[pypi].
+ .
+ This patch is subject to be removed, once python-magic from pypi (or an
+ equivalent alternative) is available.
+ Relevant discussions:
+ https://lists.debian.org/debian-python/2017/09/msg00008.html
+ https://lists.debian.org/debian-python/2017/09/msg00015.html
+ https://lists.debian.org/debian-python/2017/10/msg00021.html
+Author: Mathias Behrle <mathiasb at m9s.biz>
+Bug-Debian: https://bugs.debian.org/877849
+Last-Update: 2017-11-06
+
+--- tryton-server-4.6.0.orig/setup.py
++++ tryton-server-4.6.0/setup.py
+@@ -94,7 +94,7 @@ setup(name=name,
+ license='GPL-3',
+ install_requires=[
+ 'lxml >= 2.0',
+- 'relatorio[fodt] >= 0.7.0',
++ 'relatorio >= 0.7.0',
+ 'Genshi',
+ 'python-dateutil',
+ 'polib',
diff --git a/debian/patches/series b/debian/patches/series
index 40b8409..e448a8d 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
01_migrate_obsolete_modules.patch
+02_avoid_call_to_pypi.patch
commit e4758c2d00d5934164ee20ba7eddc7ea2221178c
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 18:14:05 2017 +0100
Remove superseeded BD on dh_systemd.
diff --git a/debian/control b/debian/control
index 87c2004..c771494 100644
--- a/debian/control
+++ b/debian/control
@@ -4,9 +4,8 @@ Priority: optional
Maintainer: Debian Tryton Maintainers <tryton-debian at lists.alioth.debian.org>
Uploaders: Mathias Behrle <mathiasb at m9s.biz>
Build-Depends:
- debhelper (>= 9),
+ debhelper (>= 9.20160709),
dh-python,
- dh-systemd (>= 1.3),
python3,
python3-dateutil,
python3-genshi,
commit eb561d9c2ae7ccb3bb0d4a7fa10fbf1585ca4d55
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 15:33:23 2017 +0100
Prepare the NEWS for 4.6.0.
diff --git a/debian/NEWS b/debian/NEWS
index 5a04cd9..d59f88e 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -1,3 +1,23 @@
+tryton-server (4.6.0-1) unstable; urgency=medium
+
+ This is the new major release 4.6.0
+
+ As for each major release don't forget to backup your database(s) and
+ follow the upgrade procedures.
+
+ Run the database update with
+ $ sudo -u tryton trytond-admin -v -c /etc/tryton/trytond.conf --all \
+ -d <your_database_name>
+
+ For further information refer also to
+ https://discuss.tryton.org/t/migration-from-4-4-to-4-6/383
+
+ Restart the server(s) with
+ $ sudo service tryton-server restart
+ $ sudo service tryton-server-cron restart
+
+ -- Mathias Behrle <mathiasb at m9s.biz> Mon, 06 Nov 2017 15:31:18 +0100
+
tryton-server (4.4.1-1) unstable; urgency=medium
This is the new major release 4.4.1.
commit 94ead3851e5aac0d4ba002f7e975723ee771f5d9
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 15:22:29 2017 +0100
Updating debian/manpages.
diff --git a/debian/manpages/trytond-admin.1 b/debian/manpages/trytond-admin.1
index 6572c08..fc483ff 100644
--- a/debian/manpages/trytond-admin.1
+++ b/debian/manpages/trytond-admin.1
@@ -1,4 +1,4 @@
-.TH TRYTOND-ADMIN 1 "2017\-06\-07" "4.4" "Tryton Application Platform"
+.TH TRYTOND-ADMIN 1 "2017\-11\-06" "4.6" "Tryton Application Platform"
.SH NAME
trytond-admin \- Tryton Application Platform (Database Adminstration)
.SH SYNOPSIS
@@ -76,5 +76,5 @@ More information about the Tryton server and the Tryton project can be found at
.SH AUTHOR
Tryton server was written by the Tryton project <\fIhttp://www.tryton.org/\fR>.
.PP
-This manual page was written by Daniel Baumann <\fIdaniel at debian.org\fR> and Mathias Behrle <\fImathiasb at m9s.biz\fR>.
+This manual page was written by Daniel Baumann <\fIdaniel at debian.org\fR> and Mathias Behrle <\fImbehrle at debian.org\fR>.
diff --git a/debian/manpages/trytond-cron.1 b/debian/manpages/trytond-cron.1
index 522debf..81f7f1b 100644
--- a/debian/manpages/trytond-cron.1
+++ b/debian/manpages/trytond-cron.1
@@ -1,4 +1,4 @@
-.TH TRYTOND-CRON 1 "2017\-06\-07" "4.4" "Tryton Application Platform"
+.TH TRYTOND-CRON 1 "2017\-11\-06" "4.6" "Tryton Application Platform"
.SH NAME
trytond-cron \- Tryton Application Platform (Cron)
.SH SYNOPSIS
@@ -51,5 +51,5 @@ More information about the Tryton server and the Tryton project can be found at
.SH AUTHOR
Tryton server was written by the Tryton project <\fIhttp://www.tryton.org/\fR>.
.PP
-This manual page was written by Daniel Baumann <\fIdaniel at debian.org\fR> and Mathias Behrle <\fImathiasb at m9s.biz\fR>.
+This manual page was written by Daniel Baumann <\fIdaniel at debian.org\fR> and Mathias Behrle <\fImbehrle at debian.org\fR>.
diff --git a/debian/manpages/trytond.1 b/debian/manpages/trytond.1
index f0c3f44..e628569 100644
--- a/debian/manpages/trytond.1
+++ b/debian/manpages/trytond.1
@@ -1,4 +1,4 @@
-.TH TRYTOND 1 "2017\-06\-07" "4.4" "Tryton Application Platform"
+.TH TRYTOND 1 "2017\-11\-06" "4.6" "Tryton Application Platform"
.SH NAME
trytond \- Tryton Application Platform (Server)
.SH SYNOPSIS
@@ -51,4 +51,4 @@ More information about the Tryton server and the Tryton project can be found at
.SH AUTHOR
Tryton server was written by the Tryton project <\fIhttp://www.tryton.org/\fR>.
.PP
-This manual page was written by Daniel Baumann <\fIdaniel at debian.org\fR> and Mathias Behrle <\fImathiasb at m9s.biz\fR>.
+This manual page was written by Daniel Baumann <\fIdaniel at debian.org\fR> and Mathias Behrle <\fImbehrle at debian.org\fR>.
commit e448637337b025210666c5d4c397a36ba9899ac8
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 15:11:36 2017 +0100
Refresh patches.
diff --git a/debian/patches/01_migrate_obsolete_modules.patch b/debian/patches/01_migrate_obsolete_modules.patch
index f281532..301004a 100644
--- a/debian/patches/01_migrate_obsolete_modules.patch
+++ b/debian/patches/01_migrate_obsolete_modules.patch
@@ -10,7 +10,7 @@ Forwarded: https://bugs.tryton.org/issue4280
--- a/trytond/modules/__init__.py
+++ b/trytond/modules/__init__.py
-@@ -406,6 +406,16 @@
+@@ -411,6 +411,16 @@
where=ir_module.state == 'uninstalled'))
if update:
commit 60ade556ba4945c5252f3ffa08c9ccd80fe10a60
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Mon Nov 6 14:41:39 2017 +0100
Merging upstream version 4.6.0.
diff --git a/.drone.yml b/.drone.yml
new file mode 100644
index 0000000..e0bc2f7
--- /dev/null
+++ b/.drone.yml
@@ -0,0 +1,51 @@
+clone:
+ hg:
+ image: plugins/hg
+
+pipeline:
+ tox:
+ image: ${IMAGE}
+ environment:
+ - CFLAGS=-O0
+ - DB_CACHE=/cache
+ - TOX_TESTENV_PASSENV=CFLAGS DB_CACHE
+ - POSTGRESQL_URI=postgresql://postgres@postgresql:5432/
+ commands:
+ - pip install tox
+ - tox -e "${TOXENV}-${DATABASE}"
+ volumes:
+ - cache:/root/.cache
+
+services:
+ postgresql:
+ image: postgres
+ when:
+ matrix:
+ DATABASE: postgresql
+
+matrix:
+ include:
+ - IMAGE: python:2.7
+ TOXENV: py27
+ DATABASE: sqlite
+ - IMAGE: python:2.7
+ TOXENV: py27
+ DATABASE: postgresql
+ - IMAGE: python:3.4
+ TOXENV: py34
+ DATABASE: sqlite
+ - IMAGE: python:3.4
+ TOXENV: py34
+ DATABASE: postgresql
+ - IMAGE: python:3.5
+ TOXENV: py35
+ DATABASE: sqlite
+ - IMAGE: python:3.5
+ TOXENV: py35
+ DATABASE: postgresql
+ - IMAGE: python:3.6
+ TOXENV: py36
+ DATABASE: sqlite
+ - IMAGE: python:3.6
+ TOXENV: py36
+ DATABASE: postgresql
diff --git a/CHANGELOG b/CHANGELOG
index 4e48db8..fe9e38c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,14 +1,28 @@
-Version 4.4.4 - 2017-10-03
-* Bug fixes (see mercurial logs for details)
-
-Version 4.4.3 - 2017-08-08
-* Bug fixes (see mercurial logs for details)
-
-Version 4.4.2 - 2017-07-01
-* Bug fixes (see mercurial logs for details)
-
-Version 4.4.1 - 2017-05-19
+Version 4.6.0 - 2017-10-30
* Bug fixes (see mercurial logs for details)
+* Add support for Python 3.6
+* Remove support for Python 3.3
+* Move handling of sequences to the Database object
+* Allow to add tests through entry points
+* Add translated descriptor for Reference field
+* Implement alter_type and alter_size for sqlite backend
+* Add a maximum size for request
+* Add support for single record report
+* Add support for Flat OpenDocument
+* Add get_email in trytond.report
+* Replace plain extension by txt
+* Support test database cache for remote postgresql
+* Increase session randomness to 32 bytes
+* Allow to specify datetime related values in XML files
+* Add environment variables to wsgi script
+* Add unique ids check on RPC
+* Assert unique records on ModelView.button and Workflow.transition
+* Add test for function field methods
+* Add option install module dependencies with trytond-admin
+* Add localhost_name and timeout as get_smtp_server uri parameters
+* Delete missing modules not activated when updating module list
+* Remove empty pages from notebook
+* Allow to store Dict as JSON on the database
Version 4.4.0 - 2017-05-01
* Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index 3e54787..74bce5a 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond
-Version: 4.4.4
+Version: 4.6.0
Summary: Tryton server
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/4.4/
+Download-URL: http://downloads.tryton.org/4.6/
Description: trytond
=======
@@ -121,9 +121,9 @@ Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
diff --git a/bin/trytond b/bin/trytond
index f5b6cf4..e0e8438 100755
--- a/bin/trytond
+++ b/bin/trytond
@@ -21,11 +21,12 @@ commandline.config_log(options)
config.update_etc(options.configfile)
# Import trytond things after it is configured
-from trytond.application import app
+from trytond.wsgi import app
from trytond.pool import Pool
from trytond.modules import get_module_list, get_module_info
with commandline.pidfile(options):
+ Pool.start()
for name in options.database_names:
Pool(name).init()
hostname, port = split_netloc(config.get('web', 'listen'))
diff --git a/doc/conf.py b/doc/conf.py
index 245b621..19b4650 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -48,9 +48,9 @@ copyright = (u'2008-2011, Bertrand Chenal, Cédric Krier, Ian Wilson, '
# built documents.
#
# The short X.Y version.
-version = '4.4'
+version = '4.6'
# The full version, including alpha/beta/rc tags.
-release = '4.4'
+release = '4.6'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/doc/ref/index.rst b/doc/ref/index.rst
index eeeecc2..be55fd5 100644
--- a/doc/ref/index.rst
+++ b/doc/ref/index.rst
@@ -17,3 +17,4 @@ API Reference
sendmail
filestore
cache
+ tests
diff --git a/doc/ref/models/fields.rst b/doc/ref/models/fields.rst
index 7b3ceca..cb6bfda 100644
--- a/doc/ref/models/fields.rst
+++ b/doc/ref/models/fields.rst
@@ -507,6 +507,12 @@ But a ``tuple`` can be used to search or set value.
Same as :attr:`Many2One.datetime_field`
+Instance methods:
+
+.. method:: Reference.translated([name])
+
+ Same as :meth:`~Selection.translated` but for the translated name of the
+ target model.
Many2One
--------
@@ -846,6 +852,10 @@ Dict
A dictionary field with predefined keys.
+.. note::
+ It is possible to store the dict as JSON in the database if the backend
+ supports by manually altering the column type to JSON on the database.
+
:class:`Dict` has one extra required argument:
.. attribute:: Dict.schema_model
diff --git a/doc/ref/models/models.rst b/doc/ref/models/models.rst
index 5f59d16..42c663d 100644
--- a/doc/ref/models/models.rst
+++ b/doc/ref/models/models.rst
@@ -372,19 +372,7 @@ Class attributes are:
.. attribute:: ModelSQL._order
- A list of tuples defining the default order of the records:
-
- [ ('field name', 'ASC'), ('other field name', 'DESC'), ... ]
-
- where the first element of the tuple is a field name of the model and the
- second is the sort ordering as `ASC` for ascending or `DESC` for
- descending. This second element may contain 'NULLS FIRST' or 'NULLS LAST'
- to sort null values before or after non-null values. If neither is
- specified the default behavior of the backend is used.
-
- In case the field used for the first element is a :class:`fields.Many2One`,
- it is also possible to use the dotted notation to sort on a specific field
- from the target record.
+ The default `order` parameter of :meth:`ModelStorage.search` method.
.. attribute:: ModelSQL._order_name
@@ -455,8 +443,28 @@ Class methods:
.. classmethod:: ModelStorage.search(domain[, offset[, limit[, order[, count[, query]]]]])
- Return a list of records that match the :ref:`domain <topics-domain>` or
- the sql query if query is True.
+ Return a list of records that match the :ref:`domain <topics-domain>`.
+
+ If `offset` or `limit` are set, the result starts at the offset and has the
+ length of the limit.
+
+ The `order` is a list of tuples defining the order of the result:
+
+ [ ('field name', 'ASC'), ('other field name', 'DESC'), ... ]
+
+ The first element of the tuple is a field name of the model and the second
+ is the sort ordering as `ASC` for ascending or `DESC` for descending. This
+ second element may contain 'NULLS FIRST' or 'NULLS LAST' to sort null
+ values before or after non-null values. If neither is specified the default
+ behavior of the backend is used.
+
+ In case the field used is a :class:`fields.Many2One`, it is also possible
+ to use the dotted notation to sort on a specific field from the target
+ record.
+
+ If `count` is set to `True`, then the result is the number of records.
+
+ If `query` is set to `True`, the the result is the SQL query.
.. classmethod:: ModelSQL.search_domain(domain[, active_test[, tables]])
@@ -737,9 +745,12 @@ Instance methods:
Return the value of the field `name` for the pattern.
-.. method:: MultiValueMixin.set_multivalue(name, value, \*\*pattern)
+.. method:: MultiValueMixin.set_multivalue(name, value[, save], \*\*pattern)
Store the value of the field `name` for the pattern.
+ If `save` is true, it will be stored in the database, otherwise the
+ modified :class:`ValueMixin` records are returned unsaved. `save` is true
+ by default.
.. warning::
To customize the pattern, both methods must be override the same way.
diff --git a/doc/ref/tests.rst b/doc/ref/tests.rst
new file mode 100644
index 0000000..5e3313f
--- /dev/null
+++ b/doc/ref/tests.rst
@@ -0,0 +1,102 @@
+.. _ref-test:
+.. module:: trytond.tests.test_tryton
+
+====
+Test
+====
+
+.. attribute:: DB_NAME
+
+ The name of the database to use for testing. Its value is taken from the
+ environment variable of the same name.
+
+.. attribute:: USER
+
+ The user id used to test the transactions
+
+.. attribute:: CONTEXT
+
+ The context used to test the transactions
+
+.. function:: activate_module(name)
+
+Activates the module `name` for the tested database.
+
+In case database does not exist and the `DB_CACHE` environment variable is set
+then Tryton will restore a backup found in the directory pointed by `DB_CACHE`.
+Otherwise it will proceed to the creation of the database and the activation of
+the module.
+
+==============
+ModuleTestCase
+==============
+
+.. class:: ModuleTestCase()
+
+A subclass of `unittest.TestCase`_ that tests a Tryton module. Some tests are
+included to ensure that the module works properly.
+
+This class creates a temporary database with the module activated in
+`setUpClass`_ and drops it in the `tearDownClass` method.
+
+.. attribute:: ModuleTestCase.module
+
+ Name of the tested module.
+
+.. _`unittest.TestCase`: https://docs.python.org/library/unittest.html#test-cases
+.. _setUpClass: https://docs.python.org/library/unittest.html#unittest.TestCase.setUpClass
+.. _tearDownClass: https://docs.python.org/library/unittest.html#unittest.TestCase.tearDownClass
+
+=======
+Helpers
+=======
+
+.. function:: with_transaction(user=1, context=None)
+
+This function returns a decorator to run a test case inside a transaction. The
+transaction is rolled back and the cache cleared at the end of the test.
+
+doctest helpers
+---------------
+
+.. function:: doctest_setup
+
+A function that prepares the run of the `doctest`_ by creating a database and
+dropping it beforehand if necessary. This function should be used as the
+`setUp` parameter
+
+.. deprecated::
+ The `doctest_setup` function should not be used anymore to set up
+ `DocFileSuite`. New modules should use :func:`activate_modules` instead.
+
+.. _doctest: https://docs.python.org/library/doctest.html
+
+.. function:: doctest_teardown()
+
+A function that cleans up after the run of the doctest by dropping the
+database. It should be used as `tearDown` parameter when creating a
+`DocFileSuite`.
+
+.. attribute:: doctest_checker
+
+ A specialized doctest checker to ensure the Python 2/3 compatibility
+
+.. function:: suite()
+
+A function returning a subclass of `unittest.TestSuite` that will drop the
+database if it does not exist prior to the run of the tests.
+
+.. module:: trytond.tests.tools
+
+===========
+Tests tools
+===========
+
+.. function:: activate_modules(modules)
+
+This function is used in proteus doctests to activate a list of `modules` in
+the scenario.
+
+.. function:: set_user(user, config)
+
+This function will set the user of the `config` proteus connection to `user`.
diff --git a/doc/topics/configuration.rst b/doc/topics/configuration.rst
index 1ed05e6..0b2698b 100644
--- a/doc/topics/configuration.rst
+++ b/doc/topics/configuration.rst
@@ -119,6 +119,24 @@ table for translations.
Default: `en`
+request
+-------
+
+max_size
+~~~~~~~~
+
+The maximum size in bytes of unauthenticated request (zero means no limit).
+
+Default: 2MB
+
+max_size_authenticated
+~~~~~~~~~~~~~~~~~~~~~~
+
+The maximum size in bytes of an authenticated request (zero means no limit).
+
+Default: 2GB
+
+
cache
-----
@@ -191,6 +209,15 @@ The available protocols are:
- `smtp+tls`: SMTP with STARTTLS
- `smtps`: SMTP with SSL
+The uri accepts the following additional parameters:
+
+* `local_hostname`: used as FQDN of the local host in the HELO/EHLO commands,
+ if omited it will use the value of `socket.getfqdn()`.
+* `timeout`: A number of seconds used as timeout for blocking operations. A
+ `socket.timeout` will be raised when exceeded. If omited the default timeout
+ will be used.
+
+
Default: `smtp://localhost:25`
from
diff --git a/doc/topics/index.rst b/doc/topics/index.rst
index f05bf19..853e6da 100644
--- a/doc/topics/index.rst
+++ b/doc/topics/index.rst
@@ -31,3 +31,4 @@ Introduction to all the key parts of trytond:
user_application
modules/index
translation
+ testing
diff --git a/doc/topics/install.rst b/doc/topics/install.rst
index a449ead..e95d80b 100644
--- a/doc/topics/install.rst
+++ b/doc/topics/install.rst
@@ -11,7 +11,7 @@ Prerequisites
* Werkzeug (http://werkzeug.pocoo.org/)
* wrapt (https://github.com/GrahamDumpleton/wrapt)
* lxml 2.0 or later (http://lxml.de/)
- * relatorio 0.2.0 or later (http://code.google.com/p/python-relatorio/)
+ * relatorio 0.7.0 or later (http://relatorio.tryton.org/)
* Genshi (http://genshi.edgewall.org/)
* python-dateutil (http://labix.org/python-dateutil)
* polib (https://bitbucket.org/izi/polib/wiki/Home)
@@ -27,6 +27,7 @@ Prerequisites
* Optional: python-Levenshtein
(http://github.com/miohtama/python-Levenshtein)
* Optional: bcrypt (https://github.com/pyca/bcrypt)
+ * Optional: html2text (https://pypi.python.org/pypi/html2text)
* Optional: mock (http://www.voidspace.org.uk/python/mock/)
Install Tryton
diff --git a/doc/topics/modules/index.rst b/doc/topics/modules/index.rst
index 21d0638..1343f5a 100644
--- a/doc/topics/modules/index.rst
+++ b/doc/topics/modules/index.rst
@@ -138,6 +138,13 @@ Here is the list of the tags:
an ending dot, if the record is defined in an other module.
* ``eval``: Python code to evaluate and use result as value.
+ The following expressions are available:
+
+ * ``time``: The python time_ module
+ * ``version``: The current Tryton version
+ * ``ref``: A function that converts an XML id into a database id.
+ * ``Decimal``: The python Decimal_ object
+ * ``datetime``: The python datetime_ module
* ``pyson``: convert the evaluated value into :ref:`PYSON <ref-pyson>`
string.
@@ -171,3 +178,6 @@ Here is the list of the tags:
.. _ConfigParser: http://docs.python.org/library/configparser.html
+.. _time: http://docs.python.org/library/time.html
+.. _Decimal: https://docs.python.org/library/decimal.html
+.. _datetime: https://docs.python.org/library/datetime.html
diff --git a/doc/topics/reports/index.rst b/doc/topics/reports/index.rst
index ab7bbf8..d389af2 100644
--- a/doc/topics/reports/index.rst
+++ b/doc/topics/reports/index.rst
@@ -50,6 +50,10 @@ When defining an `ir.action.report` the following attributes are available:
* ``template_extension``: The template format.
+ * ``single``: `True` if the template works only for one record. If such
+ report is called with more than one record, a zip file containing all the
+ reports will be generated.
+
Report Usage
============
@@ -129,12 +133,12 @@ Accessing models from within the report
---------------------------------------
By default instances of the models the report is for are passed in to the
-report via a list of objects called `objects`. These objects behave just as
-they would within trytond itself. You can access any of the models relations as
-well. For example within the invoice report each object is an invoice and you
-can access the name of the party of the invoice via `invoice.party.name`.
-Additional objects can be passed to a report. This is discussed below in
-`Passing custom data to a report`.
+report via a list of objects called `records` (or `record` if `single` is
+`True`). These records behave just as they would within trytond itself. You
+can access any of the models relations as well. For example within the invoice
+report each object is an invoice and you can access the name of the party of
+the invoice via `invoice.party.name`. Additional objects can be passed to a
+report. This is discussed below in `Passing custom data to a report`.
Within Tryton the underlying model the report can be found by following the
Menu to ``Administration > UI > Actions > Report``. Furthermore in tryton the
diff --git a/doc/topics/start_server.rst b/doc/topics/start_server.rst
index dcd446f..ffb6148 100644
--- a/doc/topics/start_server.rst
+++ b/doc/topics/start_server.rst
@@ -21,9 +21,13 @@ WSGI server
-----------
If you prefer to run Tryton inside your own WSGI server instead of the simple
-server of Werkzeug, you can use the application `trytond.application.app` and
-set the environment variable `TRYTOND_CONFIG` to point to the
-:ref:`configuration <topics-configuration>`.
+server of Werkzeug, you can use the application `trytond.application.app`.
+Following environment variables can be set:
+
+ * `TRYTOND_CONFIG`: Point to :ref:`configuration <topics-configuration>` file.
+ * `TRYTOND_LOGGING_CONFIG`: Point to :ref:`logging <topics-logs>` file.
+ * `TRYTOND_DATABASE_NAMES`: A list of database names in CSV format, using
+ python default dialect.
.. warning:: You must manage to serve the static files from the web root.
diff --git a/doc/topics/testing.rst b/doc/topics/testing.rst
new file mode 100644
index 0000000..ca76749
--- /dev/null
+++ b/doc/topics/testing.rst
@@ -0,0 +1,105 @@
+.. _topics-testing:
+
+=======
+Testing
+=======
+
+Tryton supports both functional and unit tests.
+
+Testing your module
+~~~~~~~~~~~~~~~~~~~
+
+Functional tests
+----------------
+
+Functional tests are written as doctests_ using proteus.
+
+Unit tests
+----------
+
+Tryton provides the :class:`ModuleTestCase` class that bundles a set of tests
+that are useful for every module.
+
+Unit tests in `ModuleTestCase` can be decorated with
+:func:`trytond.tests.test_tryton.with_transaction` to run the test in a
+transaction.
+
+To use it in your own module you just have to inherit from
+:class:`ModuleTestCase` and set the class attribute
+:attr:`module <ModuleTestCase.module>` to the name of your module.
+
+.. highlight:: python
+
+::
+
+ from trytond.tests.test_tryton import ModuleTestCase, with_transaction
+
+ class MyModuleTestCase(ModuleTestCase):
+ "My Module Test Case"
+ module = 'my_module'
+
+ @with_transaction()
+ def test_method(self):
+ "Test method"
+ self.assert_(True)
+
+
+Tests from this modules are found by the function
+`trytond.modules.my_module.tests.suite` which must return a
+`unittest.TestSuite` containing all the module's tests. This function is called
+by the Tryton test runner script to gather all the tests.
+
+A typical `suite()` function thus looks like this:
+
+.. highlight:: python
+
+::
+
+ def suite():
+ suite = trytond.tests.test_tryton.suite()
+ suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
+ MyModuleTestCase))
+ suite.addTests(doctest.DocFileSuite('scenario_my_module.rst',
+ tearDown=doctest_teardown, encoding='utf-8',
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE,
+ checker=doctest_checker))
+ return suite
+
+.. _doctests: https://docs.python.org/library/doctest.html
+.. _unittest: https://docs.python.org/library/unittest.html
+
+Running your module's tests
+---------------------------
+
+Tryton provides the script `trytond/tests/run-tests.py`, just invoke it like
+that::
+
+ run-tests.py -m my_module
+
+Testing trytond
+~~~~~~~~~~~~~~~
+
+Extending tests
+---------------
+
+Python modules extending tryton core can define additional tests that should be
+added to the existing ones.
+
+Those modules must create an entry point `trytond.tests`. Any file in the
+module path specified by this entry point starting with `test_` and ending by
+`.py` will be imported. Each of those file must define a `suite()` function
+that returns a `unittest.TestSuite` that will be included in the trytond test
+suite. If the module from the entry point defines a `register` function it
+will be called when registering the test-specific models in the
+:class:`trytond.pool.Pool`.
+
+Running trytond tests
+---------------------
+
+You should use the script `trytond/tests/run-tests.py` by invoking it like
+that::
+
+ run-tests.py [-c configuration]
+
+You can use a different configuration file to check trytond against different
+backend.
diff --git a/doc/topics/user_application.rst b/doc/topics/user_application.rst
index b5b7f3c..38123cf 100644
--- a/doc/topics/user_application.rst
+++ b/doc/topics/user_application.rst
@@ -22,9 +22,12 @@ Example::
.. _Rule Format: http://werkzeug.pocoo.org/docs/latest/routing/#rule-format
-Tryton also provides some wrappers in `trytond.procotols.wrappers` to ease the
+Tryton also provides some wrappers in `trytond.protocols.wrappers` to ease the
creation of such route.
+ - `set_max_request_size(size)`: change the default limit of the request to
+ the size in bytes.
+
- `with_pool`: which takes the first parameter as database name and
replace it by the corresponding instance of the :ref:`Pool <ref-pool>`.
diff --git a/doc/topics/views/index.rst b/doc/topics/views/index.rst
index 74d9eda..8a7cfa2 100644
--- a/doc/topics/views/index.rst
+++ b/doc/topics/views/index.rst
@@ -442,7 +442,7 @@ Example
::
- <form string="Party" col="6">
+ <form col="6">
<label name="name"/>
<field name="name" xexpand="1"/>
<label name="code"/>
@@ -568,7 +568,7 @@ Example
::
- <tree string="Taxes" sequence="sequence">
+ <tree sequence="sequence">
<field name="name"/>
<field name="percentage">
<suffix name="percentage" string="%"/>
@@ -801,7 +801,7 @@ Example
::
- <calendar string="Productions" dtstart="planned_date">
+ <calendar dtstart="planned_date">
<field name="code"/>
<field name="product"/>
<field name="reference"/>
diff --git a/setup.py b/setup.py
index 0bd9241..cfcb93d 100644
--- a/setup.py
+++ b/setup.py
@@ -33,9 +33,9 @@ if minor_version % 2:
name, name, version)
if platform.python_implementation() == 'PyPy':
- pg_require = ['psycopg2cffi >= 2.5']
+ pg_require = ['psycopg2cffi >= 2.5.4']
else:
- pg_require = ['psycopg2 >= 2.5']
+ pg_require = ['psycopg2 >= 2.5.4']
setup(name=name,
version=version,
@@ -83,9 +83,9 @@ setup(name=name,
'Natural Language :: Spanish',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Topic :: Software Development :: Libraries :: Application Frameworks',
@@ -94,7 +94,7 @@ setup(name=name,
license='GPL-3',
install_requires=[
'lxml >= 2.0',
- 'relatorio >= 0.2.0',
+ 'relatorio[fodt] >= 0.7.0',
'Genshi',
'python-dateutil',
'polib',
@@ -110,6 +110,7 @@ setup(name=name,
'cdecimal': ['cdecimal'],
'Levenshtein': ['python-Levenshtein'],
'BCrypt': ['bcrypt'],
+ 'html2text': ['html2text'],
},
zip_safe=False,
test_suite='trytond.tests',
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..bd4664a
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,19 @@
+[tox]
+envlist = {py27,py34,py35,py36}-{sqlite,postgresql,mysql},pypy-{sqlite,postgresql}
+
+[testenv]
+commands = {envpython} setup.py test
+deps =
+ mock
+ {py27,py34,py35,py36}-postgresql: psycopg2 >= 2.5
+ pypy-postgresql: psycopg2cffi >= 2.5
+ mysql: MySQL-python
+ sqlite: sqlitebck
+setenv =
+ sqlite: TRYTOND_DATABASE_URI={env:SQLITE_URI:sqlite://}
+ postgresql: TRYTOND_DATABASE_URI={env:POSTGRESQL_URI:postgresql://}
+ mysql: TRYTOND_DATABASE_URI={env:MYSQL_URI:mysql://}
+ sqlite: DB_NAME={env:SQLITE_NAME::memory:}
+ postgresql: DB_NAME={env:POSTGRESQL_NAME:test}
+ mysql: DB_NAME={env:MYSQL_NAME:test}
+install_command = pip install --pre --find-links https://trydevpi.tryton.org/ {opts} {packages}
diff --git a/trytond.egg-info/PKG-INFO b/trytond.egg-info/PKG-INFO
index 3e54787..74bce5a 100644
--- a/trytond.egg-info/PKG-INFO
+++ b/trytond.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond
-Version: 4.4.4
+Version: 4.6.0
Summary: Tryton server
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/4.4/
+Download-URL: http://downloads.tryton.org/4.6/
Description: trytond
=======
@@ -121,9 +121,9 @@ Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
diff --git a/trytond.egg-info/SOURCES.txt b/trytond.egg-info/SOURCES.txt
index 3e6a977..b2c0f9e 100644
--- a/trytond.egg-info/SOURCES.txt
+++ b/trytond.egg-info/SOURCES.txt
@@ -1,3 +1,5 @@
+.drone.yml
+.hgtags
CHANGELOG
COPYRIGHT
INSTALL
@@ -5,6 +7,7 @@ LICENSE
MANIFEST.in
README
setup.py
+tox.ini
bin/trytond
bin/trytond-admin
bin/trytond-cron
@@ -19,6 +22,7 @@ doc/ref/pool.rst
doc/ref/pyson.rst
doc/ref/rpc.rst
doc/ref/sendmail.rst
+doc/ref/tests.rst
doc/ref/transaction.rst
doc/ref/wizard.rst
doc/ref/models/fields.rst
@@ -39,6 +43,7 @@ doc/topics/pyson.rst
doc/topics/rpc.rst
doc/topics/setup_database.rst
doc/topics/start_server.rst
+doc/topics/testing.rst
doc/topics/translation.rst
doc/topics/triggers.rst
doc/topics/user_application.rst
@@ -69,6 +74,7 @@ trytond/security.py
trytond/sendmail.py
trytond/test_loader.py
trytond/transaction.py
+trytond/tryton.rnc
trytond/url.py
trytond/wsgi.py
trytond.egg-info/PKG-INFO
@@ -349,6 +355,7 @@ trytond/tests/import_data.py
trytond/tests/import_data.xml
trytond/tests/model.py
trytond/tests/modelview.py
+trytond/tests/modelview.xml
trytond/tests/mptt.py
trytond/tests/multivalue.py
trytond/tests/run-tests.py
diff --git a/trytond.egg-info/requires.txt b/trytond.egg-info/requires.txt
index 84b8ab7..bcc4429 100644
--- a/trytond.egg-info/requires.txt
+++ b/trytond.egg-info/requires.txt
@@ -1,5 +1,5 @@
lxml >= 2.0
-relatorio >= 0.2.0
+relatorio[fodt] >= 0.7.0
Genshi
python-dateutil
polib
@@ -17,7 +17,7 @@ python-Levenshtein
MySQL-python
[PostgreSQL]
-psycopg2 >= 2.5
+psycopg2 >= 2.5.4
[cdecimal]
cdecimal
@@ -25,5 +25,8 @@ cdecimal
[graphviz]
pydot
+[html2text]
+html2text
+
[unoconv]
unoconv
diff --git a/trytond/__init__.py b/trytond/__init__.py
index 8eaa04d..5ef7426 100644
--- a/trytond/__init__.py
+++ b/trytond/__init__.py
@@ -5,14 +5,14 @@ import time
import warnings
from email import charset
-__version__ = "4.4.4"
+__version__ = "4.6.0"
os.environ['TZ'] = 'UTC'
if hasattr(time, 'tzset'):
time.tzset()
if time.tzname[0] != 'UTC':
- warnings.warn('Timezone must be set to UTC instead of %s', time.tzname[0])
+ warnings.warn('Timezone must be set to UTC instead of %s' % time.tzname[0])
# set email encoding for utf-8 to 'quoted-printable'
charset.add_charset('utf-8', charset.QP, charset.QP)
diff --git a/trytond/admin.py b/trytond/admin.py
index fb09aea..1c75144 100644
--- a/trytond/admin.py
+++ b/trytond/admin.py
@@ -30,7 +30,7 @@ def run(options):
database.init()
init[db_name] = True
elif not database.test():
- raise Exception("'%s' is not a Tryton database!" % db_name)
+ raise Exception('"%s" is not a Tryton database.' % db_name)
for db_name in options.database_names:
if options.update:
@@ -39,7 +39,7 @@ def run(options):
database = Database(db_name)
database.connect()
if not database.test():
- raise Exception("'%s' is not a Tryton database!" % db_name)
+ raise Exception('"%s" is not a Tryton database.' % db_name)
lang = Table('ir_lang')
cursor.execute(*lang.select(lang.code,
where=lang.translatable == True))
@@ -50,7 +50,8 @@ def run(options):
lang = set()
lang |= set(options.languages)
pool = Pool(db_name)
- pool.init(update=options.update, lang=list(lang))
+ pool.init(update=options.update, lang=list(lang),
+ installdeps=options.installdeps)
if options.update_modules_list:
with Transaction().start(db_name, 0) as transaction:
@@ -77,21 +78,21 @@ def run(options):
if passpath:
try:
with open(passpath) as passfile:
- password = passfile.readline()[:-1]
+ password, = passfile.read().splitlines()
except Exception, err:
sys.stderr.write('Can not read password '
'from "%s": "%s"\n' % (passpath, err))
if not password:
while True:
- password = getpass('Admin Password for %s: ' % db_name)
- password2 = getpass('Admin Password Confirmation: ')
+ password = getpass('"admin" password for "%s": ' % db_name)
+ password2 = getpass('"admin" password confirmation: ')
if password != password2:
- sys.stderr.write('Admin Password Confirmation '
- 'doesn\'t match Admin Password!\n')
+ sys.stderr.write('"admin" password confirmation '
+ 'doesn\'t match "admin" password.\n')
continue
if not password:
- sys.stderr.write('Admin Password is required!\n')
+ sys.stderr.write('"admin" password is required.\n')
continue
break
diff --git a/trytond/application.py b/trytond/application.py
index ef3b73b..49bae0f 100644
--- a/trytond/application.py
+++ b/trytond/application.py
@@ -1,9 +1,25 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-from trytond.pool import Pool
-from trytond.wsgi import app
+import csv
+import os
+import logging.config
+from io import StringIO
__all__ = ['app']
+# Logging must be set before importing
+logging_config = os.environ.get('TRYTOND_LOGGING_CONFIG')
+if logging_config:
+ logging.config.fileConfig(logging_config)
+
+from trytond.pool import Pool
+from trytond.wsgi import app
+
Pool.start()
-import trytond.protocols.dispatcher
+# TRYTOND_CONFIG it's managed by importing config
+db_names = os.environ.get('TRYTOND_DATABASE_NAMES')
+if db_names:
+ # Read with csv so database name can include special chars
+ reader = csv.reader(StringIO(unicode(db_names)))
+ for db_name in next(reader):
+ Pool(db_name).init()
diff --git a/trytond/backend/database.py b/trytond/backend/database.py
index fe92d04..69a794f 100644
--- a/trytond/backend/database.py
+++ b/trytond/backend/database.py
@@ -164,6 +164,49 @@ class DatabaseInterface(object):
"Return if database supports window functions."
return False
+ @classmethod
+ def has_sequence(cls):
+ "Return if database supports sequence querying and assignation"
+ return False
+
+ def sequence_exist(self, connection, name):
+ "Return if a sequence exists"
+ if not self.has_sequence():
+ return
+ raise NotImplementedError
+
+ def sequence_create(
+ self, connection, name, number_increment=1, start_value=1):
+ "Creates a sequence"
+ if not self.has_sequence():
+ return
+ raise NotImplementedError
+
+ def sequence_update(
+ self, connection, name, number_increment=1, start_value=1):
+ "Modifies a sequence"
+ if not self.has_sequence():
+ return
+ raise NotImplementedError
+
+ def sequence_rename(self, connection, old_name, new_name):
+ "Renames a sequence"
+ if not self.has_sequence():
+ return
+ raise NotImplementedError
+
+ def sequence_delete(self, connection, name):
+ "Removes a sequence"
+ if not self.has_sequence():
+ return
+ raise NotImplementedError
+
+ def sequence_next_number(self, connection, name):
+ "Gets the next number of a sequence"
+ if not self.has_sequence():
+ return
+ raise NotImplementedError
+
def sql_type(self, type_):
'Return the SQLType tuple corresponding to the SQL type'
pass
diff --git a/trytond/backend/mysql/database.py b/trytond/backend/mysql/database.py
index 73b7fec..e4c9e0f 100644
--- a/trytond/backend/mysql/database.py
+++ b/trytond/backend/mysql/database.py
@@ -87,6 +87,7 @@ class Database(DatabaseInterface):
'INTEGER': SQLType('SIGNED INTEGER', 'BIGINT'),
'BIGINTEGER': SQLType('SIGNED INTEGER', 'BIGINT'),
'NUMERIC': SQLType('DECIMAL', 'DECIMAL(65, 30)'),
+ 'INTERVAL': SQLType('DOUBLE', 'DOUBLE(255, 6)'),
}
def connect(self):
diff --git a/trytond/backend/mysql/init.sql b/trytond/backend/mysql/init.sql
index cb91ae6..8e612cc 100644
--- a/trytond/backend/mysql/init.sql
+++ b/trytond/backend/mysql/init.sql
@@ -129,5 +129,6 @@ CREATE TABLE ir_module_dependency (
CREATE TABLE ir_cache (
id BIGINT AUTO_INCREMENT NOT NULL,
name VARCHAR(255),
- "timestamp" TIMESTAMP
+ "timestamp" TIMESTAMP,
+ PRIMARY KEY(id)
) ENGINE=InnoDB;
diff --git a/trytond/backend/mysql/table.py b/trytond/backend/mysql/table.py
index b0f81fa..bc47738 100644
--- a/trytond/backend/mysql/table.py
+++ b/trytond/backend/mysql/table.py
@@ -78,14 +78,6 @@ class TableHandler(TableHandlerInterface):
cursor.execute('ALTER TABLE `%s` RENAME TO `%s`'
% (old_history, new_history))
- @staticmethod
- def sequence_exist(sequence_name):
- return True
-
- @staticmethod
- def sequence_rename(old_name, new_name):
- pass
-
def column_exist(self, column_name):
return column_name in self._columns
diff --git a/trytond/backend/postgresql/database.py b/trytond/backend/postgresql/database.py
index d45026c..789f423 100644
--- a/trytond/backend/postgresql/database.py
+++ b/trytond/backend/postgresql/database.py
@@ -2,9 +2,9 @@
# this repository contains the full copyright notices and license terms.
import time
import logging
-import re
import os
import urllib
+import json
from decimal import Decimal
from threading import RLock
@@ -26,18 +26,18 @@ except ImportError:
PYDATE, PYDATETIME, PYTIME, PYINTERVAL = None, None, None, None
from psycopg2 import IntegrityError as DatabaseIntegrityError
from psycopg2 import OperationalError as DatabaseOperationalError
+from psycopg2.extras import register_default_json, register_default_jsonb
from sql import Flavor
from trytond.backend.database import DatabaseInterface, SQLType
from trytond.config import config, parse_uri
+from trytond.protocols.jsonrpc import JSONDecoder
__all__ = ['Database', 'DatabaseIntegrityError', 'DatabaseOperationalError']
logger = logging.getLogger(__name__)
-RE_VERSION = re.compile(r'\S+ (\d+)\.(\d+)')
-
os.environ['PGTZ'] = os.environ.get('TZ', '')
@@ -87,7 +87,6 @@ class Database(DatabaseInterface):
if name in cls._databases:
return cls._databases[name]
inst = DatabaseInterface.__new__(cls, name=name)
- cls._databases[name] = inst
logger.info('connect to "%s"', name)
minconn = config.getint('database', 'minconn', default=1)
@@ -96,6 +95,7 @@ class Database(DatabaseInterface):
minconn, maxconn, cls.dsn(name),
cursor_factory=LoggingCursor)
+ cls._databases[name] = inst
return inst
@classmethod
@@ -141,10 +141,10 @@ class Database(DatabaseInterface):
self._databases.pop(self.name)
@classmethod
- def create(cls, connection, database_name):
+ def create(cls, connection, database_name, template='template0'):
cursor = connection.cursor()
cursor.execute('CREATE DATABASE "' + database_name + '" '
- 'TEMPLATE template0 ENCODING \'unicode\'')
+ 'TEMPLATE "' + template + '" ENCODING \'unicode\'')
connection.commit()
cls._list_cache = None
@@ -156,10 +156,11 @@ class Database(DatabaseInterface):
def get_version(self, connection):
if self.name not in self._version_cache:
cursor = connection.cursor()
- cursor.execute('SELECT version()')
+ cursor.execute('SHOW server_version_num')
version, = cursor.fetchone()
- self._version_cache[self.name] = tuple(map(int,
- RE_VERSION.search(version).groups()))
+ major, rest = divmod(int(version), 10000)
+ minor, patch = divmod(rest, 100)
+ self._version_cache[self.name] = (major, minor, patch)
return self._version_cache[self.name]
def list(self):
@@ -316,6 +317,10 @@ class Database(DatabaseInterface):
def has_window_functions(self):
return True
+ @classmethod
+ def has_sequence(cls):
+ return True
+
def sql_type(self, type_):
if type_ in self.TYPES_MAPPING:
return self.TYPES_MAPPING[type_]
@@ -329,6 +334,76 @@ class Database(DatabaseInterface):
return Binary(value)
return value
+ def sequence_exist(self, connection, name):
+ cursor = connection.cursor()
+ for schema in self.search_path:
+ cursor.execute('SELECT 1 '
+ 'FROM information_schema.sequences '
+ 'WHERE sequence_name = %s AND sequence_schema = %s',
+ (name, schema))
+ if cursor.rowcount:
+ return True
+ return False
+
+ def sequence_create(
+ self, connection, name, number_increment=1, start_value=1):
+ cursor = connection.cursor()
+
+ param = self.flavor.param
+ cursor.execute(
+ 'CREATE SEQUENCE "%s" '
+ 'INCREMENT BY %s '
+ 'START WITH %s'
+ % (name, param, param),
+ (number_increment, start_value))
+
+ def sequence_update(
+ self, connection, name, number_increment=1, start_value=1):
+ cursor = connection.cursor()
+ param = self.flavor.param
+ cursor.execute(
+ 'ALTER SEQUENCE "%s" '
+ 'INCREMENT BY %s '
+ 'RESTART WITH %s'
+ % (name, param, param),
+ (number_increment, start_value))
+
+ def sequence_rename(self, connection, old_name, new_name):
+ cursor = connection.cursor()
+ if (self.sequence_exist(connection, old_name)
+ and not self.sequence_exist(connection, new_name)):
+ cursor.execute('ALTER TABLE "%s" RENAME TO "%s"'
+ % (old_name, new_name))
+
+ def sequence_delete(self, connection, name):
+ cursor = connection.cursor()
+ cursor.execute('DROP SEQUENCE "%s"' % name)
+
+ def sequence_next_number(self, connection, name):
+ cursor = connection.cursor()
+ version = self.get_version(connection)
+ if version >= (10, 0):
+ cursor.execute(
+ 'SELECT increment_by '
+ 'FROM pg_sequences '
+ 'WHERE sequencename=%s '
+ % self.flavor.param,
+ (name,))
+ increment, = cursor.fetchone()
+ cursor.execute(
+ 'SELECT CASE WHEN NOT is_called THEN last_value '
+ 'ELSE last_value + %s '
+ 'END '
+ 'FROM "%s"' % (self.flavor.param, name),
+ (increment,))
+ else:
+ cursor.execute(
+ 'SELECT CASE WHEN NOT is_called THEN last_value '
+ 'ELSE last_value + increment_by '
+ 'END '
+ 'FROM "%s"' % name)
+ return cursor.fetchone()[0]
+
register_type(UNICODE)
if PYDATE:
register_type(PYDATE)
@@ -340,3 +415,9 @@ if PYINTERVAL:
register_type(PYINTERVAL)
register_adapter(float, lambda value: AsIs(repr(value)))
register_adapter(Decimal, lambda value: AsIs(str(value)))
+
+
+def convert_json(value):
+ return json.loads(value, object_hook=JSONDecoder())
+register_default_json(loads=convert_json)
+register_default_jsonb(loads=convert_json)
diff --git a/trytond/backend/postgresql/table.py b/trytond/backend/postgresql/table.py
index f09172d..68ae4a6 100644
--- a/trytond/backend/postgresql/table.py
+++ b/trytond/backend/postgresql/table.py
@@ -26,8 +26,10 @@ class TableHandler(TableHandlerInterface):
transaction = Transaction()
cursor = transaction.connection.cursor()
# Create sequence if necessary
- if not self.sequence_exist(self.sequence_name):
- cursor.execute('CREATE SEQUENCE "%s"' % self.sequence_name)
+ if not transaction.database.sequence_exist(
+ transaction.connection, self.sequence_name):
+ transaction.database.sequence_create(
+ transaction.connection, self.sequence_name)
# Create new table if necessary
if not self.table_exist(self.table_name):
@@ -85,7 +87,8 @@ class TableHandler(TableHandlerInterface):
@staticmethod
def table_rename(old_name, new_name):
- cursor = Transaction().connection.cursor()
+ transaction = Transaction()
+ cursor = transaction.connection.cursor()
# Rename table
if (TableHandler.table_exist(old_name)
and not TableHandler.table_exist(new_name)):
@@ -94,7 +97,8 @@ class TableHandler(TableHandlerInterface):
# Rename sequence
old_sequence = old_name + '_id_seq'
new_sequence = new_name + '_id_seq'
- TableHandler.sequence_rename(old_sequence, new_sequence)
+ transaction.database.sequence_rename(
+ transaction.connection, old_sequence, new_sequence)
# Rename history table
old_history = old_name + "__history"
new_history = new_name + "__history"
@@ -103,30 +107,6 @@ class TableHandler(TableHandlerInterface):
cursor.execute('ALTER TABLE "%s" RENAME TO "%s"'
% (old_history, new_history))
- @classmethod
- def sequence_schema(cls, sequence_name):
- transaction = Transaction()
- cursor = transaction.connection.cursor()
- for schema in transaction.database.search_path:
- cursor.execute('SELECT 1 '
- 'FROM information_schema.sequences '
- 'WHERE sequence_name = %s AND sequence_schema = %s',
- (sequence_name, schema))
- if cursor.rowcount:
- return schema
-
- @classmethod
- def sequence_exist(cls, sequence_name):
- return bool(cls.sequence_schema(sequence_name))
-
- @staticmethod
- def sequence_rename(old_name, new_name):
- cursor = Transaction().connection.cursor()
- if (TableHandler.sequence_exist(old_name)
- and not TableHandler.sequence_exist(new_name)):
- cursor.execute('ALTER TABLE "%s" RENAME TO "%s"'
- % (old_name, new_name))
-
def column_exist(self, column_name):
return column_name in self._columns
diff --git a/trytond/backend/sqlite/table.py b/trytond/backend/sqlite/table.py
index a419037..f2bab69 100644
--- a/trytond/backend/sqlite/table.py
+++ b/trytond/backend/sqlite/table.py
@@ -86,39 +86,38 @@ class TableHandler(TableHandlerInterface):
cursor.execute('ALTER TABLE "%s" RENAME TO "%s"'
% (old_history, new_history))
- @staticmethod
- def sequence_exist(sequence_name):
- return True
-
- @staticmethod
- def sequence_rename(old_name, new_name):
- pass
-
def column_exist(self, column_name):
return column_name in self._columns
+ def _recreate_table(self, new_columns):
+ transaction = Transaction()
+ database = transaction.database
+ cursor = transaction.connection.cursor()
+ temp_table = '_temp_%s' % self.table_name
+ TableHandler.table_rename(self.table_name, temp_table)
+ new_table = TableHandler(self._model, history=self.history)
+ columns, old_columns = [], []
+ for column, values in self._columns.iteritems():
+ typname = new_columns.get(column, {}).get(
+ 'typname', values['typname'])
+ size = new_columns.get(column, {}).get('size', values['size'])
+ new_column = new_columns.get(column, {}).get('name', column)
+ new_table._add_raw_column(
+ new_column, database.sql_type(typname), field_size=size)
+ columns.append(new_column)
+ old_columns.append(column)
+ cursor.execute(('INSERT INTO "%s" (' +
+ ','.join('"%s"' % x for x in columns) +
+ ') SELECT ' +
+ ','.join('"%s"' % x for x in old_columns) + ' ' +
+ 'FROM "%s"') % (self.table_name, temp_table))
+ cursor.execute('DROP TABLE "%s"' % temp_table)
+ self._update_definitions()
+
def column_rename(self, old_name, new_name, exception=False):
- cursor = Transaction().connection.cursor()
if self.column_exist(old_name) and \
not self.column_exist(new_name):
- temp_table = '_temp_%s' % self.table_name
- TableHandler.table_rename(self.table_name, temp_table)
- new_table = TableHandler(self._model, history=self.history)
- for column, (notnull, hasdef, size, typname) \
- in self._columns.iteritems():
- if column == old_name:
- column = new_name
- new_table._add_raw_column(column, typname, field_size=size)
- new_columns = new_table._columns.keys()
- old_columns = [x if x != old_name else new_name
- for x in new_columns]
- cursor.execute(('INSERT INTO "%s" (' +
- ','.join('"%s"' % x for x in new_columns) +
- ') SELECT ' +
- ','.join('"%s"' % x for x in old_columns) + ' ' +
- 'FROM "%s"') % (self.table_name, temp_table))
- cursor.execute('DROP TABLE "%s"' % temp_table)
- self._update_definitions()
+ self._recreate_table({old_name: {'name': new_name}})
elif exception and self.column_exist(new_name):
raise Exception('Unable to rename column %s.%s to %s.%s: '
'%s.%s already exist!'
@@ -168,10 +167,10 @@ class TableHandler(TableHandlerInterface):
return dict(cursor)
def alter_size(self, column_name, column_type):
- warnings.warn('Unable to alter size of column with SQLite backend')
+ self._recreate_table({column_name: {'size': column_type}})
def alter_type(self, column_name, column_type):
- warnings.warn('Unable to alter type of column with SQLite backend')
+ self._recreate_table({column_name: {'typname': column_type}})
def db_default(self, column_name, value):
warnings.warn('Unable to set default on column with SQLite backend')
diff --git a/trytond/backend/table.py b/trytond/backend/table.py
index 7344841..a34b265 100644
--- a/trytond/backend/table.py
+++ b/trytond/backend/table.py
@@ -48,26 +48,6 @@ class TableHandlerInterface(object):
'''
raise NotImplementedError
- @staticmethod
- def sequence_exist(sequence_name):
- '''
- Sequence exist
-
- :param sequence_name: the sequence name
- :return: a boolean
- '''
- raise NotImplementedError
-
- @staticmethod
- def sequence_rename(old_name, new_name):
- '''
- Rename sequence
-
- :param old_name: the old sequence name
- :param new_name: the new sequence name
- '''
- raise NotImplementedError
-
def column_exist(self, column_name):
'''
Column exist
diff --git a/trytond/commandline.py b/trytond/commandline.py
index f3f09d5..ad07049 100644
--- a/trytond/commandline.py
+++ b/trytond/commandline.py
@@ -47,6 +47,9 @@ def get_parser_admin():
metavar='MODULE', help="update a module")
parser.add_argument("--all", dest="update", action="append_const",
const="ir", help="update all installed modules")
+ parser.add_argument("--install-dependencies", dest="installdeps",
+ action="store_true",
+ help="Install missing dependencies of updated modules")
parser.add_argument("-p", "--password", dest="password",
action='store_true', help="set the admin password")
parser.add_argument("-m", "--update-modules-list", action="store_true",
diff --git a/trytond/config.py b/trytond/config.py
index bfdc2e4..1206a58 100644
--- a/trytond/config.py
+++ b/trytond/config.py
@@ -52,6 +52,9 @@ class TrytonConfigParser(ConfigParser.RawConfigParser):
self.set('database', 'list', 'True')
self.set('database', 'retry', 5)
self.set('database', 'language', 'en')
+ self.add_section('request')
+ self.set('request', 'max_size', 2 * 1024 * 1024)
+ self.set('request', 'max_size_authenticated', 2 * 1024 * 1024 * 1024)
self.add_section('cache')
self.set('cache', 'model', 200)
self.set('cache', 'record', 2000)
diff --git a/trytond/convert.py b/trytond/convert.py
index 279dc90..315e18a 100644
--- a/trytond/convert.py
+++ b/trytond/convert.py
@@ -1,6 +1,7 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import time
+import datetime
from xml import sax
import logging
import re
@@ -229,8 +230,8 @@ class RecordTagHandler:
context['time'] = time
context['version'] = __version__.rsplit('.', 1)[0]
context['ref'] = self.mh.get_id
- context['obj'] = lambda *a: 1
context['Decimal'] = Decimal
+ context['datetime'] = datetime
if pyson_attr:
context.update(CONTEXT)
value = eval(eval_attr, context)
diff --git a/trytond/exceptions.py b/trytond/exceptions.py
index 18cc120..a42b20f 100644
--- a/trytond/exceptions.py
+++ b/trytond/exceptions.py
@@ -62,3 +62,12 @@ class ConcurrencyException(TrytonException):
class RateLimitException(TrytonException):
"""User has sent too many requests in a given amount of time."""
+
+
+class MissingDependenciesException(TrytonException):
+
+ def __init__(self, missings):
+ self.missings = missings
+
+ def __unicode__(self):
+ return 'Missing dependencies: %s' % ' '.join(self.missings)
diff --git a/trytond/ir/action.py b/trytond/ir/action.py
index 259658a..fd21881 100644
--- a/trytond/ir/action.py
+++ b/trytond/ir/action.py
@@ -136,7 +136,7 @@ class ActionKeyword(ModelSQL, ModelView):
@classmethod
def search_groups(cls, name, clause):
- return [('action.groups',) + tuple(clause[1:])]
+ return [('action.' + clause[0],) + tuple(clause[1:])]
@classmethod
def validate(cls, actions):
@@ -294,7 +294,7 @@ class ActionMixin(ModelSQL):
@classmethod
def search_action(cls, name, clause):
- return [('action.' + name,) + tuple(clause[1:])]
+ return [('action.' + clause[0],) + tuple(clause[1:])]
@classmethod
def create(cls, vlist):
@@ -409,12 +409,14 @@ class ActionReport(ActionMixin, ModelSQL, ModelView):
action = fields.Many2One('ir.action', 'Action', required=True,
ondelete='CASCADE')
direct_print = fields.Boolean('Direct Print')
+ single = fields.Boolean("Single",
+ help="Check if the template works only for one record.")
template_extension = fields.Selection([
('odt', 'OpenDocument Text'),
('odp', 'OpenDocument Presentation'),
('ods', 'OpenDocument Spreadsheet'),
('odg', 'OpenDocument Graphics'),
- ('plain', 'Plain Text'),
+ ('txt', 'Plain Text'),
('xml', 'XML'),
('html', 'HTML'),
('xhtml', 'XHTML'),
@@ -564,6 +566,12 @@ class ActionReport(ActionMixin, ModelSQL, ModelView):
# Migration from 3.4 remove report_name_module_uniq constraint
table.drop_constraint('report_name_module_uniq')
+ # Migration from 4.4 replace plain extension by txt
+ cursor.execute(*action_report.update(
+ [action_report.extension],
+ ['txt'],
+ where=action_report.extension == 'plain'))
+
@staticmethod
def default_type():
return 'ir.action.report'
@@ -576,6 +584,10 @@ class ActionReport(ActionMixin, ModelSQL, ModelView):
def default_direct_print():
return False
+ @classmethod
+ def default_single(cls):
+ return False
+
@staticmethod
def default_template_extension():
return 'odt'
diff --git a/trytond/ir/export.py b/trytond/ir/export.py
index 9210f39..8ac9415 100644
--- a/trytond/ir/export.py
+++ b/trytond/ir/export.py
@@ -21,5 +21,5 @@ class ExportLine(ModelSQL, ModelView):
"Export line"
__name__ = 'ir.export.line'
name = fields.Char('Name')
- export = fields.Many2One('ir.export', 'Export',
- select=True)
+ export = fields.Many2One('ir.export', 'Export', select=True, required=True,
+ ondelete='CASCADE')
diff --git a/trytond/ir/locale/bg.po b/trytond/ir/locale/bg.po
index 95fdcc7..729805a 100644
--- a/trytond/ir/locale/bg.po
+++ b/trytond/ir/locale/bg.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -354,8 +354,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -469,8 +469,8 @@ msgid "PySON Search Criteria"
msgstr "PySON критерии за търсене"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -541,10 +541,9 @@ msgctxt "field:ir.action.act_window.domain,name:"
msgid "Name"
msgstr "Име на прикачен файл"
-#, fuzzy
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.act_window.domain,sequence:"
@@ -583,8 +582,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -632,8 +631,8 @@ msgid "Model"
msgstr "Модел"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -713,8 +712,8 @@ msgid "PySON Email"
msgstr "PySON Email"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -736,6 +735,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Вътрешно име"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Разширение на шаблон"
@@ -800,8 +803,8 @@ msgid "Name"
msgstr "Име на прикачен файл"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.url,type:"
@@ -875,8 +878,8 @@ msgid "Name"
msgstr "Име на прикачен файл"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.wizard,type:"
@@ -949,8 +952,8 @@ msgid "Name"
msgstr "Име на прикачен файл"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -989,8 +992,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1024,10 +1027,9 @@ msgctxt "field:ir.configuration,language:"
msgid "language"
msgstr "Език"
-#, fuzzy
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.configuration,write_date:"
@@ -1088,8 +1090,8 @@ msgid "Number of Calls"
msgstr "Брой обаждания"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1136,8 +1138,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1172,8 +1174,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1224,8 +1226,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1280,8 +1282,8 @@ msgid "Model Description"
msgstr "Описание на модел"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1332,8 +1334,8 @@ msgid "Write Access"
msgstr "Права за писане"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1372,8 +1374,8 @@ msgid "Name"
msgstr "Име на прикачен файл"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1420,10 +1422,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1460,10 +1461,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.click,record_id:"
@@ -1514,10 +1514,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1570,8 +1569,8 @@ msgid "Out of Sync"
msgstr ""
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1622,8 +1621,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1684,8 +1683,8 @@ msgid "Write Access"
msgstr "Права за писане"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1736,8 +1735,8 @@ msgid "Parents"
msgstr "Родители"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1795,8 +1794,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.module.config_wizard.item,sequence:"
@@ -1844,8 +1843,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1892,10 +1891,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note,resource:"
@@ -1936,10 +1934,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr "Бележка"
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note.read,user:"
@@ -1974,8 +1971,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -2038,8 +2035,8 @@ msgid "Write Access"
msgstr "Права за писане"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2106,8 +2103,8 @@ msgid "Prefix"
msgstr "Префикс"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2182,8 +2179,8 @@ msgid "Prefix"
msgstr "Префикс"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2230,8 +2227,8 @@ msgid "Sequence Name"
msgstr "Име на последователност"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2258,8 +2255,8 @@ msgid "Key"
msgstr "Ключ"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2286,8 +2283,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2334,8 +2331,8 @@ msgid "Overriding Module"
msgstr ""
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2472,8 +2469,8 @@ msgid "On Write"
msgstr "При запис"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2496,8 +2493,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2544,8 +2541,8 @@ msgid "SVG Path"
msgstr "Път към SVG файл"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2613,8 +2610,8 @@ msgid "Parent Menu"
msgstr "Родителско меню"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2648,10 +2645,9 @@ msgctxt "field:ir.ui.menu.favorite,menu:"
msgid "Menu"
msgstr "Меню"
-#, fuzzy
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.menu.favorite,sequence:"
@@ -2724,8 +2720,8 @@ msgid "Priority"
msgstr "Важност"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2773,10 +2769,9 @@ msgctxt "field:ir.ui.view_search,name:"
msgid "Name"
msgstr "Име на прикачен файл"
-#, fuzzy
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.view_search,user:"
@@ -2826,10 +2821,9 @@ msgctxt "field:ir.ui.view_tree_state,nodes:"
msgid "Expanded Nodes"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2871,8 +2865,8 @@ msgid "Model"
msgstr "Модел"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2918,6 +2912,10 @@ msgstr ""
"Оставете празно за същото като шаблона, вижте документацията на unoconv за "
"съвместими формати"
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Стартиране на помощник в нов прозорец"
diff --git a/trytond/ir/locale/ca.po b/trytond/ir/locale/ca.po
index 3bf5ba3..0b9cde2 100644
--- a/trytond/ir/locale/ca.po
+++ b/trytond/ir/locale/ca.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -378,8 +378,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -486,8 +486,8 @@ msgid "PySON Search Criteria"
msgstr "Criteri de cerca PySON"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -550,8 +550,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -586,8 +586,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -634,8 +634,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -710,8 +710,8 @@ msgid "PySON Email"
msgstr "Correu electrònic PySON"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -733,6 +733,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Nom intern"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr "Únic"
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Tipus de document"
@@ -790,8 +794,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -858,8 +862,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -930,8 +934,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -970,8 +974,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1002,8 +1006,8 @@ msgid "language"
msgstr "idioma"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1062,8 +1066,8 @@ msgid "Number of Calls"
msgstr "Número de crides"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1110,8 +1114,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1146,8 +1150,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1198,8 +1202,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1254,8 +1258,8 @@ msgid "Model Description"
msgstr "Descripció model"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1306,8 +1310,8 @@ msgid "Write Access"
msgstr "Permís per modificar"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1346,8 +1350,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1390,8 +1394,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1422,8 +1426,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1466,8 +1470,8 @@ msgid "Number of User"
msgstr "Número d'usuaris"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1518,8 +1522,8 @@ msgid "Out of Sync"
msgstr "Sense sincronitzar"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1570,8 +1574,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1630,8 +1634,8 @@ msgid "Write Access"
msgstr "Permís per modificar"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1682,8 +1686,8 @@ msgid "Parents"
msgstr "Pares"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1738,8 +1742,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1786,8 +1790,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1830,8 +1834,8 @@ msgid "Message"
msgstr "Missatge"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1866,8 +1870,8 @@ msgid "Note"
msgstr "Nota"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1898,8 +1902,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1962,8 +1966,8 @@ msgid "Write Access"
msgstr "Permís per modificar"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2030,8 +2034,8 @@ msgid "Prefix"
msgstr "Prefix"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2106,8 +2110,8 @@ msgid "Prefix"
msgstr "Prefix"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2154,8 +2158,8 @@ msgid "Sequence Name"
msgstr "Nom de la seqüència"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2182,8 +2186,8 @@ msgid "Key"
msgstr "Tecla"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2210,8 +2214,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2258,8 +2262,8 @@ msgid "Overriding Module"
msgstr "Mòdul anul·lant"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2394,8 +2398,8 @@ msgid "On Write"
msgstr "Al modificar"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2418,8 +2422,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2466,8 +2470,8 @@ msgid "SVG Path"
msgstr "Ruta SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2534,8 +2538,8 @@ msgid "Parent Menu"
msgstr "Menú pare"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2566,8 +2570,8 @@ msgid "Menu"
msgstr "Menú"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2634,8 +2638,8 @@ msgid "Priority"
msgstr "Prioritat"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2678,8 +2682,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2722,8 +2726,8 @@ msgid "Expanded Nodes"
msgstr "Nodes expandits"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2762,8 +2766,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2809,6 +2813,10 @@ msgstr ""
"Deixeu-lo buit per mantenir el mateix que a la plantilla, consulteu la "
"documentació de l'unoconv per conèixer formats compatibles."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr "Marqueu si la plantilla funciona només per un sol registre."
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Executa l'assistent en una nova finestra."
@@ -3987,7 +3995,7 @@ msgstr "Voleu sincronitzar les traduccions?"
msgctxt "view:ir.translation.set.succeed:"
msgid "Set Succeed!"
-msgstr "Les traduccions s'han realitzat correctament."
+msgstr "Les traduccions s'han definit correctament."
msgctxt "view:ir.ui.view:"
msgid "Show"
diff --git a/trytond/ir/locale/cs.po b/trytond/ir/locale/cs.po
index 231d454..a84efc6 100644
--- a/trytond/ir/locale/cs.po
+++ b/trytond/ir/locale/cs.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -343,10 +343,9 @@ msgctxt "field:ir.action,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -453,10 +452,9 @@ msgctxt "field:ir.action.act_window,pyson_search_value:"
msgid "PySON Search Criteria"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -519,10 +517,9 @@ msgctxt "field:ir.action.act_window.domain,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -556,10 +553,9 @@ msgctxt "field:ir.action.act_window.view,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -605,10 +601,9 @@ msgctxt "field:ir.action.keyword,model:"
msgid "Model"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -683,10 +678,9 @@ msgctxt "field:ir.action.report,pyson_email:"
msgid "PySON Email"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -708,6 +702,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr ""
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr ""
@@ -765,10 +763,9 @@ msgctxt "field:ir.action.url,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -835,10 +832,9 @@ msgctxt "field:ir.action.wizard,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -909,10 +905,9 @@ msgctxt "field:ir.attachment,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -951,10 +946,9 @@ msgctxt "field:ir.cache,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -984,10 +978,9 @@ msgctxt "field:ir.configuration,language:"
msgid "language"
msgstr ""
-#, fuzzy
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1046,10 +1039,9 @@ msgctxt "field:ir.cron,number_calls:"
msgid "Number of Calls"
msgstr ""
-#, fuzzy
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1096,10 +1088,9 @@ msgctxt "field:ir.export,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1134,10 +1125,9 @@ msgctxt "field:ir.export.line,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1188,10 +1178,9 @@ msgctxt "field:ir.lang,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1245,10 +1234,9 @@ msgctxt "field:ir.model,name:"
msgid "Model Description"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1298,10 +1286,9 @@ msgctxt "field:ir.model.access,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1340,10 +1327,9 @@ msgctxt "field:ir.model.button,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1385,10 +1371,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1418,10 +1403,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1463,10 +1447,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1516,10 +1499,9 @@ msgctxt "field:ir.model.data,out_of_sync:"
msgid "Out of Sync"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1570,10 +1552,9 @@ msgctxt "field:ir.model.field,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1631,10 +1612,9 @@ msgctxt "field:ir.model.field.access,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1685,10 +1665,9 @@ msgctxt "field:ir.module,parents:"
msgid "Parents"
msgstr ""
-#, fuzzy
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1742,10 +1721,9 @@ msgctxt "field:ir.module.config_wizard.item,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1792,10 +1770,9 @@ msgctxt "field:ir.module.dependency,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1837,10 +1814,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1874,10 +1850,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1907,10 +1882,9 @@ msgctxt "field:ir.rule,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1973,10 +1947,9 @@ msgctxt "field:ir.rule.group,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2042,10 +2015,9 @@ msgctxt "field:ir.sequence,prefix:"
msgid "Prefix"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2119,10 +2091,9 @@ msgctxt "field:ir.sequence.strict,prefix:"
msgid "Prefix"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2168,10 +2139,9 @@ msgctxt "field:ir.sequence.type,name:"
msgid "Sequence Name"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2197,10 +2167,9 @@ msgctxt "field:ir.session,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2226,10 +2195,9 @@ msgctxt "field:ir.session.wizard,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2275,10 +2243,9 @@ msgctxt "field:ir.translation,overriding_module:"
msgid "Overriding Module"
msgstr ""
-#, fuzzy
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2413,10 +2380,9 @@ msgctxt "field:ir.trigger,on_write:"
msgid "On Write"
msgstr ""
-#, fuzzy
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2438,10 +2404,9 @@ msgctxt "field:ir.trigger.log,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2488,10 +2453,9 @@ msgctxt "field:ir.ui.icon,path:"
msgid "SVG Path"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2557,10 +2521,9 @@ msgctxt "field:ir.ui.menu,parent:"
msgid "Parent Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2590,10 +2553,9 @@ msgctxt "field:ir.ui.menu.favorite,menu:"
msgid "Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2660,10 +2622,9 @@ msgctxt "field:ir.ui.view,priority:"
msgid "Priority"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2706,10 +2667,9 @@ msgctxt "field:ir.ui.view_search,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2751,10 +2711,9 @@ msgctxt "field:ir.ui.view_tree_state,nodes:"
msgid "Expanded Nodes"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2792,10 +2751,9 @@ msgctxt "field:ir.ui.view_tree_width,model:"
msgid "Model"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2837,6 +2795,10 @@ msgid ""
"compatible format"
msgstr ""
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr ""
diff --git a/trytond/ir/locale/de.po b/trytond/ir/locale/de.po
index bb3ea18..602b0c7 100644
--- a/trytond/ir/locale/de.po
+++ b/trytond/ir/locale/de.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -388,8 +388,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -496,8 +496,8 @@ msgid "PySON Search Criteria"
msgstr "PySON Suchkriterien"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -560,8 +560,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -596,8 +596,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -644,8 +644,8 @@ msgid "Model"
msgstr "Modell"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -720,8 +720,8 @@ msgid "PySON Email"
msgstr "PySON E-Mail"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -743,6 +743,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Interner Name"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Erweiterung Vorlage"
@@ -800,8 +804,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -868,8 +872,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -940,8 +944,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -980,8 +984,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1012,8 +1016,8 @@ msgid "language"
msgstr "Sprache"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1072,8 +1076,8 @@ msgid "Number of Calls"
msgstr "Anzahl Aufrufe"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1120,8 +1124,8 @@ msgid "Name"
msgstr "Name Export"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1156,8 +1160,8 @@ msgid "Name"
msgstr "Feldname"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1208,8 +1212,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1264,8 +1268,8 @@ msgid "Model Description"
msgstr "Modell Beschreibung"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1316,8 +1320,8 @@ msgid "Write Access"
msgstr "Schreiben"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1356,8 +1360,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1400,8 +1404,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1432,8 +1436,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1476,8 +1480,8 @@ msgid "Number of User"
msgstr "Benutzeranzahl"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1528,8 +1532,8 @@ msgid "Out of Sync"
msgstr "Nicht synchronisiert"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1580,8 +1584,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1640,8 +1644,8 @@ msgid "Write Access"
msgstr "Schreiben"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1692,8 +1696,8 @@ msgid "Parents"
msgstr "Übergeordnet (Module)"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1748,8 +1752,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1796,8 +1800,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1840,8 +1844,8 @@ msgid "Message"
msgstr "Nachricht"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1876,8 +1880,8 @@ msgid "Note"
msgstr "Notiz"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1908,8 +1912,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1972,8 +1976,8 @@ msgid "Write Access"
msgstr "Schreiben"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2040,8 +2044,8 @@ msgid "Prefix"
msgstr "Präfix"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2116,8 +2120,8 @@ msgid "Prefix"
msgstr "Präfix"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2164,8 +2168,8 @@ msgid "Sequence Name"
msgstr "Name Nummernkreis"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2192,8 +2196,8 @@ msgid "Key"
msgstr "Schlüssel"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2220,8 +2224,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2268,8 +2272,8 @@ msgid "Overriding Module"
msgstr "Überschreibendes Modul"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2404,8 +2408,8 @@ msgid "On Write"
msgstr "Beim Schreiben"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2428,8 +2432,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2476,8 +2480,8 @@ msgid "SVG Path"
msgstr "Pfad"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2544,8 +2548,8 @@ msgid "Parent Menu"
msgstr "Übergeordnet (Menü)"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2576,8 +2580,8 @@ msgid "Menu"
msgstr "Menü"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2644,8 +2648,8 @@ msgid "Priority"
msgstr "Priorität"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2688,8 +2692,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2732,8 +2736,8 @@ msgid "Expanded Nodes"
msgstr "Expandierte Knoten"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2772,8 +2776,8 @@ msgid "Model"
msgstr "Modell"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2819,6 +2823,10 @@ msgstr ""
"Leer lassen für dasselbe Format wie in 'Erweiterung Vorlage', siehe unoconv-"
"Dokumentation für kompatible Formate"
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Wizard in separatem Fenster ausführen"
diff --git a/trytond/ir/locale/es.po b/trytond/ir/locale/es.po
index 2b9b23d..c29ff22 100644
--- a/trytond/ir/locale/es.po
+++ b/trytond/ir/locale/es.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -381,8 +381,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -489,8 +489,8 @@ msgid "PySON Search Criteria"
msgstr "Criterio de búsqueda PySON"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -553,8 +553,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -589,8 +589,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -637,8 +637,8 @@ msgid "Model"
msgstr "Modelo"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -713,8 +713,8 @@ msgid "PySON Email"
msgstr "Email PySON"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -736,6 +736,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Nombre interno"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr "Único"
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Tipo documento"
@@ -793,8 +797,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -861,8 +865,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -933,8 +937,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -973,8 +977,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1005,8 +1009,8 @@ msgid "language"
msgstr "idioma"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1065,8 +1069,8 @@ msgid "Number of Calls"
msgstr "Número de llamadas"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1113,8 +1117,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1149,8 +1153,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1201,8 +1205,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1257,8 +1261,8 @@ msgid "Model Description"
msgstr "Descripción modelo"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1309,8 +1313,8 @@ msgid "Write Access"
msgstr "Permiso para modificar"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1349,8 +1353,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1393,8 +1397,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1425,8 +1429,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1469,8 +1473,8 @@ msgid "Number of User"
msgstr "Número de usuarios"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1521,8 +1525,8 @@ msgid "Out of Sync"
msgstr "Sin sincronizar"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1573,8 +1577,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1633,8 +1637,8 @@ msgid "Write Access"
msgstr "Permiso para modificar"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1685,8 +1689,8 @@ msgid "Parents"
msgstr "Padres"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1741,8 +1745,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1789,8 +1793,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1833,8 +1837,8 @@ msgid "Message"
msgstr "Mensaje"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1869,8 +1873,8 @@ msgid "Note"
msgstr "Nota"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1901,8 +1905,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1965,8 +1969,8 @@ msgid "Write Access"
msgstr "Permiso para modificar"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2033,8 +2037,8 @@ msgid "Prefix"
msgstr "Prefijo"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2109,8 +2113,8 @@ msgid "Prefix"
msgstr "Prefijo"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2157,8 +2161,8 @@ msgid "Sequence Name"
msgstr "Nombre de la secuencia"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2185,8 +2189,8 @@ msgid "Key"
msgstr "Clave"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2213,8 +2217,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2261,8 +2265,8 @@ msgid "Overriding Module"
msgstr "Módulo principal"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2397,8 +2401,8 @@ msgid "On Write"
msgstr "Al modificar"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2421,8 +2425,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2469,8 +2473,8 @@ msgid "SVG Path"
msgstr "Ruta SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2537,8 +2541,8 @@ msgid "Parent Menu"
msgstr "Menú padre"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2569,8 +2573,8 @@ msgid "Menu"
msgstr "Menú"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2637,8 +2641,8 @@ msgid "Priority"
msgstr "Prioridad"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2681,8 +2685,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2725,8 +2729,8 @@ msgid "Expanded Nodes"
msgstr "Expandir nodos"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2765,8 +2769,8 @@ msgid "Model"
msgstr "Modelo"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2812,6 +2816,10 @@ msgstr ""
"Dejarlo vacío para el mismo tipo que la plantilla. Consultar la "
"documentación unoconv para conocer formatos compatibles."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr "Marcar si la plantilla funciona solo para un registro."
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Ejecuta el asistente en una nueva ventana."
@@ -3992,7 +4000,7 @@ msgstr "¿Sincronizar las traducciones?"
msgctxt "view:ir.translation.set.succeed:"
msgid "Set Succeed!"
-msgstr "Las traducciones se han realizado correctamente."
+msgstr "Las traducciones se han definido correctamente."
msgctxt "view:ir.ui.view:"
msgid "Show"
diff --git a/trytond/ir/locale/es_419.po b/trytond/ir/locale/es_419.po
index ca3522a..5b1f010 100644
--- a/trytond/ir/locale/es_419.po
+++ b/trytond/ir/locale/es_419.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -344,7 +344,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action,type:"
@@ -455,7 +455,7 @@ msgid "PySON Search Criteria"
msgstr ""
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -522,7 +522,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -560,7 +560,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -612,7 +612,7 @@ msgid "Model"
msgstr "Models"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
@@ -692,7 +692,7 @@ msgid "PySON Email"
msgstr ""
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.report,report:"
@@ -715,6 +715,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr ""
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr ""
@@ -774,7 +778,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.url,type:"
@@ -845,7 +849,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.wizard,type:"
@@ -918,7 +922,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.attachment,resource:"
@@ -958,7 +962,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.cache,timestamp:"
@@ -991,7 +995,7 @@ msgid "language"
msgstr "Languages"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.configuration,write_date:"
@@ -1052,7 +1056,7 @@ msgid "Number of Calls"
msgstr ""
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
@@ -1101,7 +1105,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.export,resource:"
@@ -1138,7 +1142,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.export.line,write_date:"
@@ -1191,7 +1195,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
@@ -1249,7 +1253,7 @@ msgid "Model Description"
msgstr ""
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model,write_date:"
@@ -1302,7 +1306,7 @@ msgid "Write Access"
msgstr ""
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.access,write_date:"
@@ -1343,7 +1347,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button,reset:"
@@ -1388,7 +1392,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1421,7 +1425,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
@@ -1466,7 +1470,7 @@ msgid "Number of User"
msgstr ""
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1521,7 +1525,7 @@ msgid "Out of Sync"
msgstr "Out of Sync"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.data,values:"
@@ -1575,7 +1579,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.field,relation:"
@@ -1636,7 +1640,7 @@ msgid "Write Access"
msgstr ""
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
@@ -1688,7 +1692,7 @@ msgid "Parents"
msgstr ""
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.module,state:"
@@ -1745,7 +1749,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -1795,7 +1799,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.module.dependency,state:"
@@ -1839,7 +1843,7 @@ msgid "Message"
msgstr ""
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.note,resource:"
@@ -1876,7 +1880,7 @@ msgid "Note"
msgstr "Notes"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.note.read,user:"
@@ -1908,7 +1912,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule,rule_group:"
@@ -1973,7 +1977,7 @@ msgid "Write Access"
msgstr ""
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule.group,rules:"
@@ -2043,7 +2047,7 @@ msgid "Prefix"
msgstr ""
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence,suffix:"
@@ -2121,7 +2125,7 @@ msgid "Prefix"
msgstr ""
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
@@ -2171,7 +2175,7 @@ msgid "Sequence Name"
msgstr "Sequence Types"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
@@ -2199,7 +2203,7 @@ msgid "Key"
msgstr ""
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.session,write_date:"
@@ -2228,7 +2232,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
@@ -2279,7 +2283,7 @@ msgid "Overriding Module"
msgstr ""
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.translation,res_id:"
@@ -2419,7 +2423,7 @@ msgid "On Write"
msgstr ""
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.trigger,write_date:"
@@ -2443,7 +2447,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
@@ -2494,7 +2498,7 @@ msgid "SVG Path"
msgstr ""
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -2566,7 +2570,7 @@ msgid "Parent Menu"
msgstr ""
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -2600,7 +2604,7 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -2672,7 +2676,7 @@ msgid "Priority"
msgstr ""
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view,type:"
@@ -2717,7 +2721,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view_search,user:"
@@ -2762,7 +2766,7 @@ msgid "Expanded Nodes"
msgstr ""
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
@@ -2804,7 +2808,7 @@ msgid "Model"
msgstr "Models"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
@@ -2847,6 +2851,10 @@ msgid ""
"compatible format"
msgstr ""
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr ""
diff --git a/trytond/ir/locale/fr.po b/trytond/ir/locale/fr.po
index 99f6ee5..278ae32 100644
--- a/trytond/ir/locale/fr.po
+++ b/trytond/ir/locale/fr.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -393,8 +393,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -501,8 +501,8 @@ msgid "PySON Search Criteria"
msgstr "Critère de recherche PySON"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -565,8 +565,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -601,8 +601,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -649,8 +649,8 @@ msgid "Model"
msgstr "Modèle"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -725,8 +725,8 @@ msgid "PySON Email"
msgstr "Email PySON"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -748,6 +748,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Nom interne"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr "Unique"
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Extension du modèle"
@@ -805,8 +809,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -873,8 +877,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -945,8 +949,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -985,8 +989,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1017,8 +1021,8 @@ msgid "language"
msgstr "Langue"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1077,8 +1081,8 @@ msgid "Number of Calls"
msgstr "Nombre d'appels"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1125,8 +1129,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1161,8 +1165,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1213,8 +1217,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1269,8 +1273,8 @@ msgid "Model Description"
msgstr "Description du modèle"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1321,8 +1325,8 @@ msgid "Write Access"
msgstr "Accès en écriture"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1361,8 +1365,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1405,8 +1409,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1437,8 +1441,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1481,8 +1485,8 @@ msgid "Number of User"
msgstr "Nombre d'utilisateur"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1533,8 +1537,8 @@ msgid "Out of Sync"
msgstr "Désynchronisé"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1585,8 +1589,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1645,8 +1649,8 @@ msgid "Write Access"
msgstr "Accès en écriture"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1697,8 +1701,8 @@ msgid "Parents"
msgstr "Parents"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1753,8 +1757,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1801,8 +1805,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1845,8 +1849,8 @@ msgid "Message"
msgstr "Message"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1881,8 +1885,8 @@ msgid "Note"
msgstr "Note"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1913,8 +1917,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1977,8 +1981,8 @@ msgid "Write Access"
msgstr "Accès en écriture"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2045,8 +2049,8 @@ msgid "Prefix"
msgstr "Préfixe"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2121,8 +2125,8 @@ msgid "Prefix"
msgstr "Préfixe"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2169,8 +2173,8 @@ msgid "Sequence Name"
msgstr "Nom de séquence"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2197,8 +2201,8 @@ msgid "Key"
msgstr "Clé"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2225,8 +2229,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2273,8 +2277,8 @@ msgid "Overriding Module"
msgstr "Module surchargeant"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2409,8 +2413,8 @@ msgid "On Write"
msgstr "À l'écriture"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2433,8 +2437,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2481,8 +2485,8 @@ msgid "SVG Path"
msgstr "Chemin vers le fichier SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2549,8 +2553,8 @@ msgid "Parent Menu"
msgstr "Menu parent"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2581,8 +2585,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2649,8 +2653,8 @@ msgid "Priority"
msgstr "Priorité"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2693,8 +2697,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2737,8 +2741,8 @@ msgid "Expanded Nodes"
msgstr "Nœuds développés"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2777,8 +2781,8 @@ msgid "Model"
msgstr "Modèle"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2824,6 +2828,11 @@ msgstr ""
"Laisser vide pour la même que le modèle, voir la documentation d'unoconv "
"pour la compatibilité de format."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+"Cocher si le modèle fonctionne uniquement avec un seul enregistrement."
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Lancer l'assistant dans un nouvel onglet"
diff --git a/trytond/ir/locale/hu_HU.po b/trytond/ir/locale/hu_HU.po
index 2f22ee5..e9bf0a6 100644
--- a/trytond/ir/locale/hu_HU.po
+++ b/trytond/ir/locale/hu_HU.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -380,8 +380,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -488,8 +488,8 @@ msgid "PySON Search Criteria"
msgstr "PySON Keresési feltételek"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -552,8 +552,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -588,8 +588,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -636,8 +636,8 @@ msgid "Model"
msgstr "Minta"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -712,8 +712,8 @@ msgid "PySON Email"
msgstr "PySON E-Mail"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -735,6 +735,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Belső név"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Bővített javaslat"
@@ -792,8 +796,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -860,8 +864,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -932,8 +936,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -972,8 +976,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1004,8 +1008,8 @@ msgid "language"
msgstr "nyelv"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1064,8 +1068,8 @@ msgid "Number of Calls"
msgstr "Hívások száma"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1112,8 +1116,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1148,8 +1152,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1200,8 +1204,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1256,8 +1260,8 @@ msgid "Model Description"
msgstr "Minta leírás"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1308,8 +1312,8 @@ msgid "Write Access"
msgstr "Írási hozzáférés"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1348,8 +1352,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1396,10 +1400,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1436,10 +1439,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.click,record_id:"
@@ -1490,10 +1492,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1546,8 +1547,8 @@ msgid "Out of Sync"
msgstr "Nem szinkronizált"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1598,8 +1599,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1658,8 +1659,8 @@ msgid "Write Access"
msgstr "Írási hozzáférés:"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1710,8 +1711,8 @@ msgid "Parents"
msgstr "Fölérendelt (modul)"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1769,8 +1770,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1817,8 +1818,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1865,10 +1866,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note,resource:"
@@ -1908,10 +1908,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note.read,user:"
@@ -1945,8 +1944,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -2009,8 +2008,8 @@ msgid "Write Access"
msgstr "Írás hozzáférés"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2077,8 +2076,8 @@ msgid "Prefix"
msgstr "Előtag"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2153,8 +2152,8 @@ msgid "Prefix"
msgstr "Előtag"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2201,8 +2200,8 @@ msgid "Sequence Name"
msgstr "Számkör neve"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2229,8 +2228,8 @@ msgid "Key"
msgstr "Kulcs"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2257,8 +2256,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2305,8 +2304,8 @@ msgid "Overriding Module"
msgstr "Átírandó modul"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2441,8 +2440,8 @@ msgid "On Write"
msgstr "Írásnál"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2465,8 +2464,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2513,8 +2512,8 @@ msgid "SVG Path"
msgstr "SVG útvonal"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2581,8 +2580,8 @@ msgid "Parent Menu"
msgstr "Felülrendelt (Menü)"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2613,8 +2612,8 @@ msgid "Menu"
msgstr "Menü"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2681,8 +2680,8 @@ msgid "Priority"
msgstr "Prioritás"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2725,8 +2724,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2769,8 +2768,8 @@ msgid "Expanded Nodes"
msgstr "Bővített konto"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2809,8 +2808,8 @@ msgid "Model"
msgstr "Minta"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2856,6 +2855,10 @@ msgstr ""
"Üresen hagyni ugyan ahhoz a formátumhoz, mint a 'bővített javaslat', lásd "
"unoconv-dokumentáció kompatibilis formátumokhoz."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Wizard kivitelezés külön ablakokon"
diff --git a/trytond/ir/locale/it_IT.po b/trytond/ir/locale/it_IT.po
index d346b54..00be184 100644
--- a/trytond/ir/locale/it_IT.po
+++ b/trytond/ir/locale/it_IT.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -390,8 +390,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -498,8 +498,8 @@ msgid "PySON Search Criteria"
msgstr "Criterio di ricerca PySON"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -562,8 +562,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -598,8 +598,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -646,8 +646,8 @@ msgid "Model"
msgstr "Modello"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -722,8 +722,8 @@ msgid "PySON Email"
msgstr "Email PySON"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -745,6 +745,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Nome Interno"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Estensione del template"
@@ -802,8 +806,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -870,8 +874,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -942,8 +946,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -982,8 +986,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1014,8 +1018,8 @@ msgid "language"
msgstr "lingua"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1074,8 +1078,8 @@ msgid "Number of Calls"
msgstr "Numero di call"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1122,8 +1126,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1158,8 +1162,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1210,8 +1214,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1266,8 +1270,8 @@ msgid "Model Description"
msgstr "Descrizione Modello"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1318,8 +1322,8 @@ msgid "Write Access"
msgstr "Accesso scrittura"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1358,8 +1362,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1402,8 +1406,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1434,8 +1438,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1478,8 +1482,8 @@ msgid "Number of User"
msgstr "numero utente"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1530,8 +1534,8 @@ msgid "Out of Sync"
msgstr "Out of Sync"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1582,8 +1586,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1642,8 +1646,8 @@ msgid "Write Access"
msgstr "Accesso scrittura"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1694,8 +1698,8 @@ msgid "Parents"
msgstr "Padri"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1750,8 +1754,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1798,8 +1802,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1842,8 +1846,8 @@ msgid "Message"
msgstr "Messaggio"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1878,8 +1882,8 @@ msgid "Note"
msgstr "Nota"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1910,8 +1914,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1974,8 +1978,8 @@ msgid "Write Access"
msgstr "Accesso scrittura"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2042,8 +2046,8 @@ msgid "Prefix"
msgstr "Prefisso"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2118,8 +2122,8 @@ msgid "Prefix"
msgstr "Prefisso"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2166,8 +2170,8 @@ msgid "Sequence Name"
msgstr "Nome Sequenza"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2194,8 +2198,8 @@ msgid "Key"
msgstr "Chiave"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2222,8 +2226,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2270,8 +2274,8 @@ msgid "Overriding Module"
msgstr "Modulo non tenuto in conto"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2406,8 +2410,8 @@ msgid "On Write"
msgstr "Alla scrttura"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2430,8 +2434,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2478,8 +2482,8 @@ msgid "SVG Path"
msgstr "Percorso SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2546,8 +2550,8 @@ msgid "Parent Menu"
msgstr "Menu Padre"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2578,8 +2582,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2646,8 +2650,8 @@ msgid "Priority"
msgstr "PrioritÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂ "
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2690,8 +2694,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2734,8 +2738,8 @@ msgid "Expanded Nodes"
msgstr "Nodi Espansi"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2774,8 +2778,8 @@ msgid "Model"
msgstr "Modello"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2819,6 +2823,10 @@ msgstr ""
"Lasciare vuoto per lo stesso come modello, vedere la documentazione unovonv "
"per il formato compatibile"
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Esegui il wizard in nuova finestra"
diff --git a/trytond/ir/locale/ja_JP.po b/trytond/ir/locale/ja_JP.po
index 4093430..6cde76d 100644
--- a/trytond/ir/locale/ja_JP.po
+++ b/trytond/ir/locale/ja_JP.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -362,7 +362,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action,type:"
@@ -473,7 +473,7 @@ msgid "PySON Search Criteria"
msgstr ""
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -540,7 +540,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -578,7 +578,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -630,7 +630,7 @@ msgid "Model"
msgstr "Models"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
@@ -710,7 +710,7 @@ msgid "PySON Email"
msgstr ""
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.report,report:"
@@ -733,6 +733,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr ""
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr ""
@@ -792,7 +796,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.url,type:"
@@ -863,7 +867,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action.wizard,type:"
@@ -936,7 +940,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.attachment,resource:"
@@ -976,7 +980,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.cache,timestamp:"
@@ -1009,7 +1013,7 @@ msgid "language"
msgstr "Languages"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.configuration,write_date:"
@@ -1070,7 +1074,7 @@ msgid "Number of Calls"
msgstr ""
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
@@ -1119,7 +1123,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.export,resource:"
@@ -1156,7 +1160,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.export.line,write_date:"
@@ -1209,7 +1213,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
@@ -1267,7 +1271,7 @@ msgid "Model Description"
msgstr ""
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model,write_date:"
@@ -1320,7 +1324,7 @@ msgid "Write Access"
msgstr ""
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.access,write_date:"
@@ -1361,7 +1365,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button,reset:"
@@ -1406,7 +1410,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1439,7 +1443,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
@@ -1484,7 +1488,7 @@ msgid "Number of User"
msgstr ""
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1539,7 +1543,7 @@ msgid "Out of Sync"
msgstr "Out of Sync"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.data,values:"
@@ -1593,7 +1597,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.field,relation:"
@@ -1654,7 +1658,7 @@ msgid "Write Access"
msgstr ""
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
@@ -1706,7 +1710,7 @@ msgid "Parents"
msgstr ""
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.module,state:"
@@ -1763,7 +1767,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -1813,7 +1817,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.module.dependency,state:"
@@ -1857,7 +1861,7 @@ msgid "Message"
msgstr ""
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.note,resource:"
@@ -1894,7 +1898,7 @@ msgid "Note"
msgstr "Notes"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.note.read,user:"
@@ -1926,7 +1930,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule,rule_group:"
@@ -1991,7 +1995,7 @@ msgid "Write Access"
msgstr ""
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule.group,rules:"
@@ -2061,7 +2065,7 @@ msgid "Prefix"
msgstr ""
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence,suffix:"
@@ -2139,7 +2143,7 @@ msgid "Prefix"
msgstr ""
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
@@ -2189,7 +2193,7 @@ msgid "Sequence Name"
msgstr "Sequence Types"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
@@ -2217,7 +2221,7 @@ msgid "Key"
msgstr ""
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.session,write_date:"
@@ -2246,7 +2250,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
@@ -2297,7 +2301,7 @@ msgid "Overriding Module"
msgstr ""
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.translation,res_id:"
@@ -2437,7 +2441,7 @@ msgid "On Write"
msgstr ""
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.trigger,write_date:"
@@ -2461,7 +2465,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
@@ -2512,7 +2516,7 @@ msgid "SVG Path"
msgstr ""
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -2584,7 +2588,7 @@ msgid "Parent Menu"
msgstr ""
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -2618,7 +2622,7 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -2690,7 +2694,7 @@ msgid "Priority"
msgstr ""
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view,type:"
@@ -2735,7 +2739,7 @@ msgid "Name"
msgstr ""
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view_search,user:"
@@ -2780,7 +2784,7 @@ msgid "Expanded Nodes"
msgstr ""
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
@@ -2822,7 +2826,7 @@ msgid "Model"
msgstr "Models"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
@@ -2865,6 +2869,10 @@ msgid ""
"compatible format"
msgstr ""
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr ""
diff --git a/trytond/ir/locale/lo.po b/trytond/ir/locale/lo.po
index cc5b8c8..df31273 100644
--- a/trytond/ir/locale/lo.po
+++ b/trytond/ir/locale/lo.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -350,10 +350,9 @@ msgctxt "field:ir.action,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -471,10 +470,9 @@ msgctxt "field:ir.action.act_window,pyson_search_value:"
msgid "PySON Search Criteria"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -546,10 +544,9 @@ msgctxt "field:ir.action.act_window.domain,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.act_window.domain,sequence:"
@@ -591,10 +588,9 @@ msgctxt "field:ir.action.act_window.view,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.act_window.view,sequence:"
@@ -650,10 +646,9 @@ msgctxt "field:ir.action.keyword,model:"
msgid "Model"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.keyword,write_date:"
@@ -738,10 +733,9 @@ msgctxt "field:ir.action.report,pyson_email:"
msgid "PySON Email"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -763,6 +757,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr ""
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr ""
@@ -831,10 +829,9 @@ msgctxt "field:ir.action.url,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.url,type:"
@@ -912,10 +909,9 @@ msgctxt "field:ir.action.wizard,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.wizard,type:"
@@ -994,10 +990,9 @@ msgctxt "field:ir.attachment,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -1042,10 +1037,9 @@ msgctxt "field:ir.cache,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1081,10 +1075,9 @@ msgctxt "field:ir.configuration,language:"
msgid "language"
msgstr "ພາສາ"
-#, fuzzy
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.configuration,write_date:"
@@ -1149,10 +1142,9 @@ msgctxt "field:ir.cron,number_calls:"
msgid "Number of Calls"
msgstr ""
-#, fuzzy
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1206,10 +1198,9 @@ msgctxt "field:ir.export,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1249,10 +1240,9 @@ msgctxt "field:ir.export.line,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.export.line,write_date:"
@@ -1313,10 +1303,9 @@ msgctxt "field:ir.lang,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.lang,thousands_sep:"
@@ -1377,10 +1366,9 @@ msgctxt "field:ir.model,name:"
msgid "Model Description"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model,write_date:"
@@ -1437,10 +1425,9 @@ msgctxt "field:ir.model.access,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.access,write_date:"
@@ -1485,10 +1472,9 @@ msgctxt "field:ir.model.button,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1537,10 +1523,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1577,10 +1562,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1629,10 +1613,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1687,10 +1670,9 @@ msgctxt "field:ir.model.data,out_of_sync:"
msgid "Out of Sync"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.data,values:"
@@ -1748,10 +1730,9 @@ msgctxt "field:ir.model.field,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1817,10 +1798,9 @@ msgctxt "field:ir.model.field.access,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.field.access,write_date:"
@@ -1878,10 +1858,9 @@ msgctxt "field:ir.module,parents:"
msgid "Parents"
msgstr ""
-#, fuzzy
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.module,state:"
@@ -1946,10 +1925,9 @@ msgctxt "field:ir.module.config_wizard.item,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.module.config_wizard.item,sequence:"
@@ -2005,10 +1983,9 @@ msgctxt "field:ir.module.dependency,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.module.dependency,state:"
@@ -2056,10 +2033,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -2099,10 +2075,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr "ໝາຍເຫດ"
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note.read,user:"
@@ -2138,10 +2113,9 @@ msgctxt "field:ir.rule,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.rule,rule_group:"
@@ -2211,10 +2185,9 @@ msgctxt "field:ir.rule.group,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2287,10 +2260,9 @@ msgctxt "field:ir.sequence,prefix:"
msgid "Prefix"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2371,10 +2343,9 @@ msgctxt "field:ir.sequence.strict,prefix:"
msgid "Prefix"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2426,10 +2397,9 @@ msgctxt "field:ir.sequence.type,name:"
msgid "Sequence Name"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.sequence.type,write_date:"
@@ -2460,10 +2430,9 @@ msgctxt "field:ir.session,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.session,write_date:"
@@ -2495,10 +2464,9 @@ msgctxt "field:ir.session.wizard,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.session.wizard,write_date:"
@@ -2550,10 +2518,9 @@ msgctxt "field:ir.translation,overriding_module:"
msgid "Overriding Module"
msgstr ""
-#, fuzzy
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2704,10 +2671,9 @@ msgctxt "field:ir.trigger,on_write:"
msgid "On Write"
msgstr ""
-#, fuzzy
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.trigger,write_date:"
@@ -2734,10 +2700,9 @@ msgctxt "field:ir.trigger.log,id:"
msgid "ID"
msgstr "ເລດລຳດັບ"
-#, fuzzy
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2790,10 +2755,9 @@ msgctxt "field:ir.ui.icon,path:"
msgid "SVG Path"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.icon,sequence:"
@@ -2871,10 +2835,9 @@ msgctxt "field:ir.ui.menu,parent:"
msgid "Parent Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.menu,sequence:"
@@ -2911,10 +2874,9 @@ msgctxt "field:ir.ui.menu.favorite,menu:"
msgid "Menu"
msgstr "ລາຍການ"
-#, fuzzy
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.menu.favorite,sequence:"
@@ -2989,10 +2951,9 @@ msgctxt "field:ir.ui.view,priority:"
msgid "Priority"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -3041,10 +3002,9 @@ msgctxt "field:ir.ui.view_search,name:"
msgid "Name"
msgstr "ຊື່"
-#, fuzzy
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.view_search,user:"
@@ -3092,10 +3052,9 @@ msgctxt "field:ir.ui.view_tree_state,nodes:"
msgid "Expanded Nodes"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -3140,10 +3099,9 @@ msgctxt "field:ir.ui.view_tree_width,model:"
msgid "Model"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.view_tree_width,user:"
@@ -3188,6 +3146,10 @@ msgid ""
"compatible format"
msgstr ""
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr ""
diff --git a/trytond/ir/locale/lt.po b/trytond/ir/locale/lt.po
index 231d454..a84efc6 100644
--- a/trytond/ir/locale/lt.po
+++ b/trytond/ir/locale/lt.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -343,10 +343,9 @@ msgctxt "field:ir.action,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -453,10 +452,9 @@ msgctxt "field:ir.action.act_window,pyson_search_value:"
msgid "PySON Search Criteria"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -519,10 +517,9 @@ msgctxt "field:ir.action.act_window.domain,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -556,10 +553,9 @@ msgctxt "field:ir.action.act_window.view,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -605,10 +601,9 @@ msgctxt "field:ir.action.keyword,model:"
msgid "Model"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -683,10 +678,9 @@ msgctxt "field:ir.action.report,pyson_email:"
msgid "PySON Email"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -708,6 +702,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr ""
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr ""
@@ -765,10 +763,9 @@ msgctxt "field:ir.action.url,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -835,10 +832,9 @@ msgctxt "field:ir.action.wizard,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -909,10 +905,9 @@ msgctxt "field:ir.attachment,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -951,10 +946,9 @@ msgctxt "field:ir.cache,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -984,10 +978,9 @@ msgctxt "field:ir.configuration,language:"
msgid "language"
msgstr ""
-#, fuzzy
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1046,10 +1039,9 @@ msgctxt "field:ir.cron,number_calls:"
msgid "Number of Calls"
msgstr ""
-#, fuzzy
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1096,10 +1088,9 @@ msgctxt "field:ir.export,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1134,10 +1125,9 @@ msgctxt "field:ir.export.line,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1188,10 +1178,9 @@ msgctxt "field:ir.lang,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1245,10 +1234,9 @@ msgctxt "field:ir.model,name:"
msgid "Model Description"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1298,10 +1286,9 @@ msgctxt "field:ir.model.access,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1340,10 +1327,9 @@ msgctxt "field:ir.model.button,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1385,10 +1371,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1418,10 +1403,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1463,10 +1447,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1516,10 +1499,9 @@ msgctxt "field:ir.model.data,out_of_sync:"
msgid "Out of Sync"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1570,10 +1552,9 @@ msgctxt "field:ir.model.field,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1631,10 +1612,9 @@ msgctxt "field:ir.model.field.access,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1685,10 +1665,9 @@ msgctxt "field:ir.module,parents:"
msgid "Parents"
msgstr ""
-#, fuzzy
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1742,10 +1721,9 @@ msgctxt "field:ir.module.config_wizard.item,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1792,10 +1770,9 @@ msgctxt "field:ir.module.dependency,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1837,10 +1814,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1874,10 +1850,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1907,10 +1882,9 @@ msgctxt "field:ir.rule,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1973,10 +1947,9 @@ msgctxt "field:ir.rule.group,perm_write:"
msgid "Write Access"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2042,10 +2015,9 @@ msgctxt "field:ir.sequence,prefix:"
msgid "Prefix"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2119,10 +2091,9 @@ msgctxt "field:ir.sequence.strict,prefix:"
msgid "Prefix"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2168,10 +2139,9 @@ msgctxt "field:ir.sequence.type,name:"
msgid "Sequence Name"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2197,10 +2167,9 @@ msgctxt "field:ir.session,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2226,10 +2195,9 @@ msgctxt "field:ir.session.wizard,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2275,10 +2243,9 @@ msgctxt "field:ir.translation,overriding_module:"
msgid "Overriding Module"
msgstr ""
-#, fuzzy
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2413,10 +2380,9 @@ msgctxt "field:ir.trigger,on_write:"
msgid "On Write"
msgstr ""
-#, fuzzy
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2438,10 +2404,9 @@ msgctxt "field:ir.trigger.log,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2488,10 +2453,9 @@ msgctxt "field:ir.ui.icon,path:"
msgid "SVG Path"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2557,10 +2521,9 @@ msgctxt "field:ir.ui.menu,parent:"
msgid "Parent Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2590,10 +2553,9 @@ msgctxt "field:ir.ui.menu.favorite,menu:"
msgid "Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2660,10 +2622,9 @@ msgctxt "field:ir.ui.view,priority:"
msgid "Priority"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2706,10 +2667,9 @@ msgctxt "field:ir.ui.view_search,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2751,10 +2711,9 @@ msgctxt "field:ir.ui.view_tree_state,nodes:"
msgid "Expanded Nodes"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2792,10 +2751,9 @@ msgctxt "field:ir.ui.view_tree_width,model:"
msgid "Model"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2837,6 +2795,10 @@ msgid ""
"compatible format"
msgstr ""
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr ""
diff --git a/trytond/ir/locale/nl.po b/trytond/ir/locale/nl.po
index deac84f..32a3bdf 100644
--- a/trytond/ir/locale/nl.po
+++ b/trytond/ir/locale/nl.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -359,8 +359,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -479,8 +479,8 @@ msgid "PySON Search Criteria"
msgstr "PySON zoekargument"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -553,10 +553,9 @@ msgctxt "field:ir.action.act_window.domain,name:"
msgid "Name"
msgstr "Naam bijlage"
-#, fuzzy
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.act_window.domain,sequence:"
@@ -598,8 +597,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -652,8 +651,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.keyword,write_date:"
@@ -739,8 +738,8 @@ msgid "PySON Email"
msgstr "PySON domein"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -763,6 +762,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Interne naam"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr ""
@@ -832,8 +835,8 @@ msgid "Name"
msgstr "Naam bijlage"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.url,type:"
@@ -912,8 +915,8 @@ msgid "Name"
msgstr "Naam bijlage"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action.wizard,type:"
@@ -993,8 +996,8 @@ msgid "Name"
msgstr "Naam bijlage"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -1039,8 +1042,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1076,10 +1079,9 @@ msgctxt "field:ir.configuration,language:"
msgid "language"
msgstr "Taal"
-#, fuzzy
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.configuration,write_date:"
@@ -1143,8 +1145,8 @@ msgid "Number of Calls"
msgstr ""
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1197,8 +1199,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1238,8 +1240,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.export.line,write_date:"
@@ -1295,8 +1297,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1356,8 +1358,8 @@ msgid "Model Description"
msgstr "Model omschrijving"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model,write_date:"
@@ -1413,8 +1415,8 @@ msgid "Write Access"
msgstr "Schrijfrecht"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.access,write_date:"
@@ -1460,10 +1462,9 @@ msgctxt "field:ir.model.button,name:"
msgid "Name"
msgstr "Naam bijlage"
-#, fuzzy
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1511,10 +1512,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1550,10 +1550,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.click,record_id:"
@@ -1603,10 +1602,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1662,8 +1660,8 @@ msgid "Out of Sync"
msgstr ""
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1719,8 +1717,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1790,10 +1788,9 @@ msgctxt "field:ir.model.field.access,perm_write:"
msgid "Write Access"
msgstr "Schrijfrecht"
-#, fuzzy
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.field.access,write_date:"
@@ -1850,8 +1847,8 @@ msgid "Parents"
msgstr ""
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1915,8 +1912,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.module.config_wizard.item,sequence:"
@@ -1971,8 +1968,8 @@ msgid "Name"
msgstr "Naam"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -2019,10 +2016,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note,resource:"
@@ -2063,10 +2059,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr "Aantekening"
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note.read,user:"
@@ -2104,8 +2099,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -2173,8 +2168,8 @@ msgid "Write Access"
msgstr "Schrijfrecht"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2247,8 +2242,8 @@ msgid "Prefix"
msgstr "Voorvoegsel"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2329,8 +2324,8 @@ msgid "Prefix"
msgstr "Voorvoegsel"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2382,8 +2377,8 @@ msgid "Sequence Name"
msgstr "Reeks naam"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.sequence.type,write_date:"
@@ -2414,10 +2409,9 @@ msgctxt "field:ir.session,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.session,write_date:"
@@ -2449,10 +2443,9 @@ msgctxt "field:ir.session.wizard,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.session.wizard,write_date:"
@@ -2504,8 +2497,8 @@ msgid "Overriding Module"
msgstr ""
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2655,8 +2648,8 @@ msgid "On Write"
msgstr "Bij muteren"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.trigger,write_date:"
@@ -2684,8 +2677,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2739,10 +2732,9 @@ msgctxt "field:ir.ui.icon,path:"
msgid "SVG Path"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.icon,sequence:"
@@ -2816,8 +2808,8 @@ msgid "Parent Menu"
msgstr "Hoofdmenu"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2853,10 +2845,9 @@ msgctxt "field:ir.ui.menu.favorite,menu:"
msgid "Menu"
msgstr "Menu"
-#, fuzzy
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.menu.favorite,sequence:"
@@ -2932,8 +2923,8 @@ msgid "Priority"
msgstr "Prioriteit"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2984,10 +2975,9 @@ msgctxt "field:ir.ui.view_search,name:"
msgid "Name"
msgstr "Naam bijlage"
-#, fuzzy
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.view_search,user:"
@@ -3037,10 +3027,9 @@ msgctxt "field:ir.ui.view_tree_state,nodes:"
msgid "Expanded Nodes"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -3085,8 +3074,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Naam"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -3130,6 +3119,10 @@ msgid ""
"compatible format"
msgstr ""
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Start assistent in nieuw venster"
diff --git a/trytond/ir/locale/pl.po b/trytond/ir/locale/pl.po
index 5c97662..5e7ff4e 100644
--- a/trytond/ir/locale/pl.po
+++ b/trytond/ir/locale/pl.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -380,8 +380,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -488,8 +488,8 @@ msgid "PySON Search Criteria"
msgstr "Kryteria wyszukiwania PySON"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -552,8 +552,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -588,8 +588,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -636,8 +636,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -712,8 +712,8 @@ msgid "PySON Email"
msgstr "E-mail PySON"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -735,6 +735,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Nazwa wewnętrzna"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr "Pojedynczy"
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Rozszerzenie szablonu"
@@ -792,8 +796,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -860,8 +864,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -932,8 +936,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -972,8 +976,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1004,8 +1008,8 @@ msgid "language"
msgstr "język"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1064,8 +1068,8 @@ msgid "Number of Calls"
msgstr "Liczba wywołań"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1112,8 +1116,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1148,8 +1152,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1200,8 +1204,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1256,8 +1260,8 @@ msgid "Model Description"
msgstr "Opis modelu"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1308,8 +1312,8 @@ msgid "Write Access"
msgstr "Zapis"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1348,8 +1352,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1392,8 +1396,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1424,8 +1428,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1468,8 +1472,8 @@ msgid "Number of User"
msgstr "Liczba użytkownika"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1520,8 +1524,8 @@ msgid "Out of Sync"
msgstr "Niezsynchronizowany"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1572,8 +1576,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1632,8 +1636,8 @@ msgid "Write Access"
msgstr "Zapis"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1657,7 +1661,7 @@ msgstr "Poziom"
msgctxt "field:ir.module,childs:"
msgid "Childs"
-msgstr "Elementy potomne"
+msgstr "Elementy podrzędne"
msgctxt "field:ir.module,create_date:"
msgid "Create Date"
@@ -1684,8 +1688,8 @@ msgid "Parents"
msgstr "Elementy nadrzędne"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1740,8 +1744,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1788,8 +1792,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1832,8 +1836,8 @@ msgid "Message"
msgstr "Wiadomość"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1868,8 +1872,8 @@ msgid "Note"
msgstr "Notatka"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1900,8 +1904,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1964,8 +1968,8 @@ msgid "Write Access"
msgstr "Zapis"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2032,8 +2036,8 @@ msgid "Prefix"
msgstr "Prefiks"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2108,8 +2112,8 @@ msgid "Prefix"
msgstr "Prefiks"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2156,8 +2160,8 @@ msgid "Sequence Name"
msgstr "Nazwa sekwencji"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2184,8 +2188,8 @@ msgid "Key"
msgstr "Klucz"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2212,8 +2216,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2260,8 +2264,8 @@ msgid "Overriding Module"
msgstr "Nadpisany moduł"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2396,8 +2400,8 @@ msgid "On Write"
msgstr "Przy zapisie"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2420,8 +2424,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2468,8 +2472,8 @@ msgid "SVG Path"
msgstr "Ścieżka SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2497,7 +2501,7 @@ msgstr "Aktywny"
msgctxt "field:ir.ui.menu,childs:"
msgid "Children"
-msgstr "Elementy potomne"
+msgstr "Elementy podrzędne"
msgctxt "field:ir.ui.menu,complete_name:"
msgid "Complete Name"
@@ -2536,8 +2540,8 @@ msgid "Parent Menu"
msgstr "Menu nadrzędne"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2568,8 +2572,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2609,7 +2613,7 @@ msgstr "Domena"
msgctxt "field:ir.ui.view,field_childs:"
msgid "Children Field"
-msgstr "Pole elementów potomnych"
+msgstr "Pole elementów podrzędnych"
msgctxt "field:ir.ui.view,id:"
msgid "ID"
@@ -2636,8 +2640,8 @@ msgid "Priority"
msgstr "Priorytet"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2680,8 +2684,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2697,7 +2701,7 @@ msgstr "Zapisał"
msgctxt "field:ir.ui.view_tree_state,child_name:"
msgid "Child Name"
-msgstr "Nazwa elementu potomnego"
+msgstr "Nazwa elementu podrzędnego"
msgctxt "field:ir.ui.view_tree_state,create_date:"
msgid "Create Date"
@@ -2724,8 +2728,8 @@ msgid "Expanded Nodes"
msgstr "Rozszerzone węzły"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2764,8 +2768,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2811,6 +2815,10 @@ msgstr ""
"Pozostaw puste jako szablon. Sprawdź dokumentację unoconv dla właściwego "
"formatu."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr "Sprawdź, czy szablon pracuje tylko dla jednego rekordu."
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Uruchom kreatora w nowym oknie"
@@ -3698,7 +3706,7 @@ msgstr "Do aktualizacji"
msgctxt "selection:ir.module.config_wizard.item,state:"
msgid "Done"
-msgstr "Ukończono"
+msgstr "Wykonano"
msgctxt "selection:ir.module.config_wizard.item,state:"
msgid "Open"
diff --git a/trytond/ir/locale/pt_BR.po b/trytond/ir/locale/pt_BR.po
index 8906098..a03070d 100644
--- a/trytond/ir/locale/pt_BR.po
+++ b/trytond/ir/locale/pt_BR.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -377,8 +377,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -485,8 +485,8 @@ msgid "PySON Search Criteria"
msgstr "Critério de busca PySON"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -549,8 +549,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -585,8 +585,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -633,8 +633,8 @@ msgid "Model"
msgstr "Modelo"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -709,8 +709,8 @@ msgid "PySON Email"
msgstr "E-mail PySON"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -732,6 +732,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Nome interno"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr "Único"
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Extensão do modelo"
@@ -789,8 +793,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -857,8 +861,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -929,8 +933,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -969,8 +973,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -1001,8 +1005,8 @@ msgid "language"
msgstr "idioma"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1061,8 +1065,8 @@ msgid "Number of Calls"
msgstr "Número de chamadas"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1109,8 +1113,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1145,8 +1149,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1197,8 +1201,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1253,8 +1257,8 @@ msgid "Model Description"
msgstr "Descrição do modelo"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1305,8 +1309,8 @@ msgid "Write Access"
msgstr "Acesso de edição"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1345,8 +1349,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1389,8 +1393,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1421,8 +1425,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1465,8 +1469,8 @@ msgid "Number of User"
msgstr "Número do Usuário"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1517,8 +1521,8 @@ msgid "Out of Sync"
msgstr "Fora de Sincronia"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1569,8 +1573,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1629,8 +1633,8 @@ msgid "Write Access"
msgstr "Acesso de edição"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1681,8 +1685,8 @@ msgid "Parents"
msgstr "Pais"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1737,8 +1741,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1785,8 +1789,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1829,8 +1833,8 @@ msgid "Message"
msgstr "Mensagem"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1865,8 +1869,8 @@ msgid "Note"
msgstr "Nota"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1897,8 +1901,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1961,8 +1965,8 @@ msgid "Write Access"
msgstr "Acesso de edição"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2029,8 +2033,8 @@ msgid "Prefix"
msgstr "Prefixo"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2105,8 +2109,8 @@ msgid "Prefix"
msgstr "Prefixo"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2153,8 +2157,8 @@ msgid "Sequence Name"
msgstr "Nome da sequência"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2181,8 +2185,8 @@ msgid "Key"
msgstr "Chave"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2209,8 +2213,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2257,8 +2261,8 @@ msgid "Overriding Module"
msgstr "Módulo sobreescrevente"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2393,8 +2397,8 @@ msgid "On Write"
msgstr "Ao editar"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2417,8 +2421,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2465,8 +2469,8 @@ msgid "SVG Path"
msgstr "Caminho do SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2533,8 +2537,8 @@ msgid "Parent Menu"
msgstr "Menu pai"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2565,8 +2569,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2633,8 +2637,8 @@ msgid "Priority"
msgstr "Prioridade"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2677,8 +2681,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2721,8 +2725,8 @@ msgid "Expanded Nodes"
msgstr "Nodos expandidos"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2761,8 +2765,8 @@ msgid "Model"
msgstr "Modelo"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2808,6 +2812,10 @@ msgstr ""
"Deixe vazio para o mesmo do modelo. Veja a documentação de unoconv para "
"formato compatível."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr "Marque se o modelo funcionar para apenas um registro."
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Executar o assitente em nova janela"
@@ -3913,7 +3921,7 @@ msgstr "Marcar para Desativação (beta)"
msgctxt "view:ir.module:"
msgid "Mark for Upgrade"
-msgstr "Marcar para desinstação (beta)"
+msgstr "Marcar para Atualização"
msgctxt "view:ir.note:"
msgid "Date"
diff --git a/trytond/ir/locale/ru.po b/trytond/ir/locale/ru.po
index d86155b..8167a2e 100644
--- a/trytond/ir/locale/ru.po
+++ b/trytond/ir/locale/ru.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -362,8 +362,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -470,8 +470,8 @@ msgid "PySON Search Criteria"
msgstr "PySON условие поиска"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -535,8 +535,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -572,8 +572,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -620,8 +620,8 @@ msgid "Model"
msgstr "Модель"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -696,8 +696,8 @@ msgid "PySON Email"
msgstr "PySON Email"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -719,6 +719,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Внутреннее наименование"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Расширение шаблонов"
@@ -776,8 +780,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -844,8 +848,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -916,8 +920,8 @@ msgid "Name"
msgstr "Имя вложения"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -956,8 +960,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -988,8 +992,8 @@ msgid "language"
msgstr "язык"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1048,8 +1052,8 @@ msgid "Number of Calls"
msgstr "Кол-во вызовов"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1096,8 +1100,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1132,8 +1136,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1184,8 +1188,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1240,8 +1244,8 @@ msgid "Model Description"
msgstr "Описание модели"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1292,8 +1296,8 @@ msgid "Write Access"
msgstr "Запись"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1332,8 +1336,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1380,10 +1384,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1420,10 +1423,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.click,record_id:"
@@ -1474,10 +1476,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1530,8 +1531,8 @@ msgid "Out of Sync"
msgstr ""
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1582,8 +1583,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1642,8 +1643,8 @@ msgid "Write Access"
msgstr "Запись"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1694,8 +1695,8 @@ msgid "Parents"
msgstr "Предки"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1753,8 +1754,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1801,8 +1802,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1849,10 +1850,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note,resource:"
@@ -1893,10 +1893,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr "Комментарий"
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note.read,user:"
@@ -1930,8 +1929,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1994,8 +1993,8 @@ msgid "Write Access"
msgstr "Запись"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2062,8 +2061,8 @@ msgid "Prefix"
msgstr "Префикс"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2138,8 +2137,8 @@ msgid "Prefix"
msgstr "Префикс"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2186,8 +2185,8 @@ msgid "Sequence Name"
msgstr "Наименование нумерации"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2214,8 +2213,8 @@ msgid "Key"
msgstr "Ключ"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2242,8 +2241,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2290,8 +2289,8 @@ msgid "Overriding Module"
msgstr ""
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2426,8 +2425,8 @@ msgid "On Write"
msgstr "При записи"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2450,8 +2449,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2498,8 +2497,8 @@ msgid "SVG Path"
msgstr "Путь к SVG"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2567,8 +2566,8 @@ msgid "Parent Menu"
msgstr "Основное меню"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2599,8 +2598,8 @@ msgid "Menu"
msgstr "Меню"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2667,8 +2666,8 @@ msgid "Priority"
msgstr "Приоритет"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2711,8 +2710,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2759,10 +2758,9 @@ msgctxt "field:ir.ui.view_tree_state,nodes:"
msgid "Expanded Nodes"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Полное наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2804,8 +2802,8 @@ msgid "Model"
msgstr "Модель"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2851,6 +2849,10 @@ msgstr ""
"Если оставить пустым - будет так же как в шаблоне. Допустимые форматы "
"смотрите в документацие unuconv."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Запустить мастера в новом окне"
diff --git a/trytond/ir/locale/sl.po b/trytond/ir/locale/sl.po
index a4c12f2..dd564c5 100644
--- a/trytond/ir/locale/sl.po
+++ b/trytond/ir/locale/sl.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -375,8 +375,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -483,8 +483,8 @@ msgid "PySON Search Criteria"
msgstr "PySON kriterij iskanja"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -547,8 +547,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -583,8 +583,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -631,8 +631,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -707,8 +707,8 @@ msgid "PySON Email"
msgstr "PySON e-pošta"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -730,6 +730,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "Interni naziv"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "Končnica predloge"
@@ -787,8 +791,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -855,8 +859,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -927,8 +931,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -967,8 +971,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -999,8 +1003,8 @@ msgid "language"
msgstr "Jezik"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1059,8 +1063,8 @@ msgid "Number of Calls"
msgstr "Število zagonov"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1107,8 +1111,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1143,8 +1147,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1195,8 +1199,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1251,8 +1255,8 @@ msgid "Model Description"
msgstr "Opis modela"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1303,8 +1307,8 @@ msgid "Write Access"
msgstr "Pisanje"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1343,8 +1347,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1387,8 +1391,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-button.reset,write_date:"
msgid "Write Date"
@@ -1419,8 +1423,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.click,record_id:"
msgid "Record ID"
@@ -1463,8 +1467,8 @@ msgid "Number of User"
msgstr "Številka uporabnika"
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button.rule,write_date:"
msgid "Write Date"
@@ -1515,8 +1519,8 @@ msgid "Out of Sync"
msgstr "Izven sinhronizacije"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1567,8 +1571,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1627,8 +1631,8 @@ msgid "Write Access"
msgstr "Pisanje"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1679,8 +1683,8 @@ msgid "Parents"
msgstr "Nadrejeni"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1735,8 +1739,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1783,8 +1787,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1827,8 +1831,8 @@ msgid "Message"
msgstr "Sporočilo"
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note,resource:"
msgid "Resource"
@@ -1863,8 +1867,8 @@ msgid "Note"
msgstr "Zabeležka"
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.note.read,user:"
msgid "User"
@@ -1895,8 +1899,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1959,8 +1963,8 @@ msgid "Write Access"
msgstr "Pisanje"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2027,8 +2031,8 @@ msgid "Prefix"
msgstr "Predpona"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2103,8 +2107,8 @@ msgid "Prefix"
msgstr "Predpona"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2151,8 +2155,8 @@ msgid "Sequence Name"
msgstr "Naziv"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2179,8 +2183,8 @@ msgid "Key"
msgstr "Ključ"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2207,8 +2211,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2255,8 +2259,8 @@ msgid "Overriding Module"
msgstr "Razširjevalni modul"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2391,8 +2395,8 @@ msgid "On Write"
msgstr "Ob pisanju"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2415,8 +2419,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2463,8 +2467,8 @@ msgid "SVG Path"
msgstr "SVG pot"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2531,8 +2535,8 @@ msgid "Parent Menu"
msgstr "Matični meni"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2563,8 +2567,8 @@ msgid "Menu"
msgstr "Meni"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2631,8 +2635,8 @@ msgid "Priority"
msgstr "Prioriteta"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2675,8 +2679,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2719,8 +2723,8 @@ msgid "Expanded Nodes"
msgstr "Razširjeni vozli"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2759,8 +2763,8 @@ msgid "Model"
msgstr "Model"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2806,6 +2810,10 @@ msgstr ""
"Za enako končnico kot v predlogi pustite prazno. Za združljiv format glejte "
"navodila za unoconv."
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "Zaženi čarovnika v novem oknu"
diff --git a/trytond/ir/locale/zh_CN.po b/trytond/ir/locale/zh_CN.po
index 96304bb..74f5645 100644
--- a/trytond/ir/locale/zh_CN.po
+++ b/trytond/ir/locale/zh_CN.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -357,8 +357,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.action,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action,type:"
msgid "Type"
@@ -465,8 +465,8 @@ msgid "PySON Search Criteria"
msgstr "PySON查找表达式"
msgctxt "field:ir.action.act_window,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window,res_model:"
msgid "Model"
@@ -529,8 +529,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.action.act_window.domain,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.domain,sequence:"
msgid "Sequence"
@@ -565,8 +565,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.action.act_window.view,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.act_window.view,sequence:"
msgid "Sequence"
@@ -613,8 +613,8 @@ msgid "Model"
msgstr "模型"
msgctxt "field:ir.action.keyword,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.keyword,write_date:"
msgid "Write Date"
@@ -689,8 +689,8 @@ msgid "PySON Email"
msgstr "PySON 邮箱"
msgctxt "field:ir.action.report,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.report,report:"
msgid "Path"
@@ -712,6 +712,10 @@ msgctxt "field:ir.action.report,report_name:"
msgid "Internal Name"
msgstr "内部标识"
+msgctxt "field:ir.action.report,single:"
+msgid "Single"
+msgstr ""
+
msgctxt "field:ir.action.report,template_extension:"
msgid "Template Extension"
msgstr "模版扩展"
@@ -769,8 +773,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.action.url,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.url,type:"
msgid "Type"
@@ -837,8 +841,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.action.wizard,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action.wizard,type:"
msgid "Type"
@@ -909,8 +913,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.attachment,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.attachment,resource:"
msgid "Resource"
@@ -949,8 +953,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.cache,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cache,timestamp:"
msgid "Timestamp"
@@ -981,8 +985,8 @@ msgid "language"
msgstr "语言"
msgctxt "field:ir.configuration,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.configuration,write_date:"
msgid "Write Date"
@@ -1041,8 +1045,8 @@ msgid "Number of Calls"
msgstr "调用次数"
msgctxt "field:ir.cron,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.cron,repeat_missed:"
msgid "Repeat Missed"
@@ -1089,8 +1093,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.export,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export,resource:"
msgid "Resource"
@@ -1125,8 +1129,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.export.line,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.export.line,write_date:"
msgid "Write Date"
@@ -1177,8 +1181,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.lang,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.lang,thousands_sep:"
msgid "Thousands Separator"
@@ -1233,8 +1237,8 @@ msgid "Model Description"
msgstr "模型描述"
msgctxt "field:ir.model,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model,write_date:"
msgid "Write Date"
@@ -1285,8 +1289,8 @@ msgid "Write Access"
msgstr "写入"
msgctxt "field:ir.model.access,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.access,write_date:"
msgid "Write Date"
@@ -1325,8 +1329,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.model.button,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button,reset:"
msgid "Reset"
@@ -1373,10 +1377,9 @@ msgctxt "field:ir.model.button-button.reset,id:"
msgid "ID"
msgstr "标识"
-#, fuzzy
msgctxt "field:ir.model.button-button.reset,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-button.reset,write_date:"
@@ -1413,10 +1416,9 @@ msgctxt "field:ir.model.button.click,id:"
msgid "ID"
msgstr "标识"
-#, fuzzy
msgctxt "field:ir.model.button.click,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.click,record_id:"
@@ -1467,10 +1469,9 @@ msgctxt "field:ir.model.button.rule,number_user:"
msgid "Number of User"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button.rule,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button.rule,write_date:"
@@ -1523,8 +1524,8 @@ msgid "Out of Sync"
msgstr "未同步"
msgctxt "field:ir.model.data,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.data,values:"
msgid "Values"
@@ -1575,8 +1576,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.model.field,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field,relation:"
msgid "Model Relation"
@@ -1635,8 +1636,8 @@ msgid "Write Access"
msgstr "写入"
msgctxt "field:ir.model.field.access,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field.access,write_date:"
msgid "Write Date"
@@ -1687,8 +1688,8 @@ msgid "Parents"
msgstr "父级"
msgctxt "field:ir.module,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module,state:"
msgid "State"
@@ -1746,8 +1747,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.module.config_wizard.item,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.config_wizard.item,sequence:"
msgid "Sequence"
@@ -1794,8 +1795,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.module.dependency,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.module.dependency,state:"
msgid "State"
@@ -1842,10 +1843,9 @@ msgctxt "field:ir.note,message_wrapped:"
msgid "Message"
msgstr ""
-#, fuzzy
msgctxt "field:ir.note,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note,resource:"
@@ -1886,10 +1886,9 @@ msgctxt "field:ir.note.read,note:"
msgid "Note"
msgstr "注释"
-#, fuzzy
msgctxt "field:ir.note.read,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.note.read,user:"
@@ -1923,8 +1922,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.rule,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule,rule_group:"
msgid "Group"
@@ -1987,8 +1986,8 @@ msgid "Write Access"
msgstr "写入"
msgctxt "field:ir.rule.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group,rules:"
msgid "Tests"
@@ -2055,8 +2054,8 @@ msgid "Prefix"
msgstr "前缀"
msgctxt "field:ir.sequence,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence,suffix:"
msgid "Suffix"
@@ -2131,8 +2130,8 @@ msgid "Prefix"
msgstr "前缀"
msgctxt "field:ir.sequence.strict,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.strict,suffix:"
msgid "Suffix"
@@ -2179,8 +2178,8 @@ msgid "Sequence Name"
msgstr "序列名"
msgctxt "field:ir.sequence.type,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type,write_date:"
msgid "Write Date"
@@ -2207,8 +2206,8 @@ msgid "Key"
msgstr "密匙"
msgctxt "field:ir.session,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session,write_date:"
msgid "Write Date"
@@ -2235,8 +2234,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.session.wizard,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.session.wizard,write_date:"
msgid "Write Date"
@@ -2283,8 +2282,8 @@ msgid "Overriding Module"
msgstr "来源模块"
msgctxt "field:ir.translation,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.translation,res_id:"
msgid "Resource ID"
@@ -2419,8 +2418,8 @@ msgid "On Write"
msgstr "写入触发"
msgctxt "field:ir.trigger,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger,write_date:"
msgid "Write Date"
@@ -2443,8 +2442,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.trigger.log,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.trigger.log,record_id:"
msgid "Record ID"
@@ -2491,8 +2490,8 @@ msgid "SVG Path"
msgstr "SVG Path"
msgctxt "field:ir.ui.icon,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.icon,sequence:"
msgid "Sequence"
@@ -2559,8 +2558,8 @@ msgid "Parent Menu"
msgstr "上一级菜单"
msgctxt "field:ir.ui.menu,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu,sequence:"
msgid "Sequence"
@@ -2591,8 +2590,8 @@ msgid "Menu"
msgstr "菜单"
msgctxt "field:ir.ui.menu.favorite,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu.favorite,sequence:"
msgid "Sequence"
@@ -2659,8 +2658,8 @@ msgid "Priority"
msgstr "优先级"
msgctxt "field:ir.ui.view,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view,type:"
msgid "View Type"
@@ -2703,8 +2702,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:ir.ui.view_search,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_search,user:"
msgid "User"
@@ -2747,8 +2746,8 @@ msgid "Expanded Nodes"
msgstr "展开节点"
msgctxt "field:ir.ui.view_tree_state,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_state,selected_nodes:"
msgid "Selected Nodes"
@@ -2787,8 +2786,8 @@ msgid "Model"
msgstr "模型"
msgctxt "field:ir.ui.view_tree_width,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.view_tree_width,user:"
msgid "User"
@@ -2832,6 +2831,10 @@ msgid ""
"compatible format"
msgstr "参考unoconv文档有关格式部分,模版空白不要改动"
+msgctxt "help:ir.action.report,single:"
+msgid "Check if the template works only for one record."
+msgstr ""
+
msgctxt "help:ir.action.wizard,window:"
msgid "Run wizard in a new window"
msgstr "打开新窗口运行向导"
diff --git a/trytond/ir/model.py b/trytond/ir/model.py
index 38a7f1b..e2abe04 100644
--- a/trytond/ir/model.py
+++ b/trytond/ir/model.py
@@ -493,9 +493,9 @@ class ModelAccess(ModelSQL, ModelView):
return cls.check(field.model_name, mode=mode,
raise_exception=False)
elif field._type in ('many2many', 'one2one'):
- if (field.target
- and not cls.check(field.target, mode=mode,
- raise_exception=False)):
+ if not cls.check(
+ field.get_target().__name__, mode=mode,
+ raise_exception=False):
return False
elif (field.relation_name
and not cls.check(field.relation_name, mode=mode,
diff --git a/trytond/ir/module.py b/trytond/ir/module.py
index b66e148..c5d0d3a 100644
--- a/trytond/ir/module.py
+++ b/trytond/ir/module.py
@@ -285,6 +285,8 @@ class Module(ModelSQL, ModelView):
modules = cls.search([])
name2module = dict((m.name, m) for m in modules)
+ cls.delete([m for m in modules
+ if m.state != 'activated' and m.name not in module_names])
# iterate through activated modules and mark them as being so
for name in module_names:
diff --git a/trytond/ir/sequence.py b/trytond/ir/sequence.py
index ca56adf..b38d4cd 100644
--- a/trytond/ir/sequence.py
+++ b/trytond/ir/sequence.py
@@ -3,7 +3,7 @@
from string import Template
import time
from itertools import izip
-from sql import Flavor, Literal, For
+from sql import Literal, For
from ..model import ModelView, ModelSQL, fields, Check
from ..tools import datetime_strftime
@@ -16,7 +16,7 @@ __all__ = [
'SequenceType', 'Sequence', 'SequenceStrict',
]
-sql_sequence = backend.name() == 'postgresql'
+sql_sequence = backend.get('Database').has_sequence()
class SequenceType(ModelSQL, ModelView):
@@ -104,6 +104,7 @@ class Sequence(ModelSQL, ModelView):
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
table = TableHandler(cls, module_name)
+ transaction = Transaction()
# Migration from 2.0 rename number_next into number_next_internal
table.column_rename('number_next', 'number_next_internal')
@@ -116,8 +117,8 @@ class Sequence(ModelSQL, ModelView):
for sequence in sequences:
if sequence.type != 'incremental':
continue
- if not TableHandler.sequence_exist(
- sequence._sql_sequence_name):
+ if not transaction.database.sequence_exist(
+ transaction.connection, sequence._sql_sequence_name):
sequence.create_sql_sequence(sequence.number_next_internal)
@staticmethod
@@ -159,14 +160,11 @@ class Sequence(ModelSQL, ModelView):
def get_number_next(self, name):
if self.type != 'incremental':
return
- cursor = Transaction().connection.cursor()
- sql_name = self._sql_sequence_name
+
+ transaction = Transaction()
if sql_sequence and not self._strict:
- cursor.execute('SELECT '
- 'CASE WHEN NOT is_called THEN last_value '
- 'ELSE last_value + increment_by '
- 'END FROM "%s"' % sql_name)
- return cursor.fetchone()[0]
+ return transaction.database.sequence_next_number(
+ transaction.connection, self._sql_sequence_name)
else:
return self.number_next_internal
@@ -260,22 +258,22 @@ class Sequence(ModelSQL, ModelView):
def create_sql_sequence(self, number_next=None):
'Create the SQL sequence'
- cursor = Transaction().connection.cursor()
- param = Flavor.get().param
+ transaction = Transaction()
+
if self.type != 'incremental':
return
if number_next is None:
number_next = self.number_next
- cursor.execute('CREATE SEQUENCE "' + self._sql_sequence_name
- + '" INCREMENT BY ' + param + ' START WITH ' + param,
- (self.number_increment, number_next))
+ if sql_sequence:
+ transaction.database.sequence_create(transaction.connection,
+ self._sql_sequence_name, self.number_increment, number_next)
def update_sql_sequence(self, number_next=None):
'Update the SQL sequence'
- TableHandler = backend.get('TableHandler')
- cursor = Transaction().connection.cursor()
- param = Flavor.get().param
- exist = TableHandler.sequence_exist(self._sql_sequence_name)
+ transaction = Transaction()
+
+ exist = transaction.database.sequence_exist(
+ transaction.connection, self._sql_sequence_name)
if self.type != 'incremental':
if exist:
self.delete_sql_sequence()
@@ -285,17 +283,16 @@ class Sequence(ModelSQL, ModelView):
return
if number_next is None:
number_next = self.number_next
- cursor.execute('ALTER SEQUENCE "' + self._sql_sequence_name
- + '" INCREMENT BY ' + param + ' RESTART WITH ' + param,
- (self.number_increment, number_next))
+ transaction.database.sequence_update(transaction.connection,
+ self._sql_sequence_name, self.number_increment, number_next)
def delete_sql_sequence(self):
'Delete the SQL sequence'
- cursor = Transaction().connection.cursor()
+ transaction = Transaction()
if self.type != 'incremental':
return
- cursor.execute('DROP SEQUENCE "%s"'
- % self._sql_sequence_name)
+ transaction.database.sequence_delete(
+ transaction.connection, self._sql_sequence_name)
@classmethod
def _process(cls, string, date=None):
diff --git a/trytond/ir/session.py b/trytond/ir/session.py
index 80cd99a..9d438b6 100644
--- a/trytond/ir/session.py
+++ b/trytond/ir/session.py
@@ -1,8 +1,16 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-import json
-import uuid
+import binascii
import datetime
+import json
+import os
+try:
+ from secrets import token_hex
+except ImportError:
+ def token_hex(nbytes=None):
+ if nbytes is None:
+ nbytes = 32
+ return binascii.hexlify(os.urandom(nbytes)).decode('ascii')
from trytond.model import ModelSQL, fields
from trytond.config import config
@@ -33,9 +41,9 @@ class Session(ModelSQL):
table = TableHandler(cls, module_name)
table.index_action('create_uid', 'add')
- @staticmethod
- def default_key():
- return uuid.uuid4().hex
+ @classmethod
+ def default_key(cls, nbytes=None):
+ return token_hex(nbytes)
@classmethod
def check(cls, user, key):
diff --git a/trytond/ir/translation.py b/trytond/ir/translation.py
index b3d21a9..30f7510 100644
--- a/trytond/ir/translation.py
+++ b/trytond/ir/translation.py
@@ -1,6 +1,5 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-import zipfile
import polib
import xml.dom.minidom
from difflib import SequenceMatcher
@@ -18,6 +17,7 @@ from sql.aggregate import Max
from genshi.filters.i18n import extract as genshi_extract
from relatorio.reporting import MIMETemplateLoader
+from relatorio.templates.opendocument import get_zip_file
from ..model import ModelView, ModelSQL, fields, Unique
from ..wizard import Wizard, StateView, StateTransition, StateAction, \
@@ -468,11 +468,12 @@ class Translation(ModelSQL, ModelView):
cursor.execute(*table.select(table.res_id, table.value,
where=where))
translations.update(cursor)
- for res_id in ids:
- value = translations.setdefault(res_id)
# Don't store fuzzy translation in cache
if not Transaction().context.get('fuzzy_translation', False):
- cls._translation_cache.set((name, ttype, lang, res_id), value)
+ for res_id in to_fetch:
+ value = translations.setdefault(res_id)
+ cls._translation_cache.set(
+ (name, ttype, lang, res_id), value)
return translations
@classmethod
@@ -628,6 +629,7 @@ class Translation(ModelSQL, ModelView):
res.update(cls.get_sources(list(sub_args)))
return res
+ to_cache = []
for name, ttype, lang, source in args:
name = unicode(name)
ttype = unicode(ttype)
@@ -638,6 +640,7 @@ class Translation(ModelSQL, ModelView):
if trans != -1:
res[(name, ttype, lang, source)] = trans
else:
+ to_cache.append((name, ttype, lang, source))
parent_lang = get_parent(lang)
if parent_lang:
parent_args.append((name, ttype, parent_lang, source))
@@ -674,8 +677,8 @@ class Translation(ModelSQL, ModelView):
if (name, ttype, lang, source) not in args:
source = None
res[(name, ttype, lang, source)] = value
- for key, value in res.iteritems():
- cls._translation_cache.set(key, value)
+ for key in to_cache:
+ cls._translation_cache.set(key, res[key])
return res
@classmethod
@@ -690,33 +693,10 @@ class Translation(ModelSQL, ModelView):
ModelView._fields_view_get_cache.clear()
vlist = [x.copy() for x in vlist]
- cursor = Transaction().connection.cursor()
- table = cls.__table__()
for vals in vlist:
if not vals.get('module'):
if Transaction().context.get('module'):
vals['module'] = Transaction().context['module']
- elif vals.get('type', '') in {
- 'report', 'view', 'wizard_button', 'selection',
- 'error'}:
- cursor.execute(*table.select(table.module,
- where=(table.name == vals.get('name') or '')
- & (table.res_id == vals.get('res_id') or -1)
- & (table.lang == 'en')
- & (table.type == vals.get('type') or '')
- & (table.src == vals.get('src') or '')))
- fetchone = cursor.fetchone()
- if fetchone:
- vals['module'] = fetchone[0]
- else:
- cursor.execute(*table.select(table.module, table.src,
- where=(table.name == vals.get('name') or '')
- & (table.res_id == vals.get('res_id') or -1)
- & (table.lang == 'en')
- & (table.type == vals.get('type') or '')))
- fetchone = cursor.fetchone()
- if fetchone:
- vals['module'], vals['src'] = fetchone
vals['src_md5'] = cls.get_src_md5(vals.get('src'))
return super(Translation, cls).create(vlist)
@@ -1007,21 +987,15 @@ class TranslationSet(Wizard):
for string in extract(child):
yield string
- content = BytesIO(content)
- try:
- content = zipfile.ZipFile(content, mode='r')
- except zipfile.BadZipfile:
- return
-
- content_xml = content.read('content.xml')
- document = xml.dom.minidom.parseString(content_xml)
- for string in extract(document.documentElement):
- yield string
+ zip_ = get_zip_file(BytesIO(content))
+ for content_xml in [
+ zip_.read('content.xml'),
+ zip_.read('styles.xml'),
+ ]:
+ document = xml.dom.minidom.parseString(content_xml)
+ for string in extract(document.documentElement):
+ yield string
- style_xml = content.read('styles.xml')
- document = xml.dom.minidom.parseString(style_xml)
- for string in extract(document.documentElement):
- yield string
extract_report_odt = extract_report_opendocument
extract_report_odp = extract_report_opendocument
extract_report_ods = extract_report_opendocument
diff --git a/trytond/ir/ui/calendar.rnc b/trytond/ir/ui/calendar.rnc
index da16cad..66d7082 100644
--- a/trytond/ir/ui/calendar.rnc
+++ b/trytond/ir/ui/calendar.rnc
@@ -18,7 +18,7 @@ data = element data { attlist.data, xpath* }
attlist.data &= empty
xpath = element xpath {
- attlist.xpath, ( field )*
+ attlist.xpath, (field | calendar)*
}
attlist.xpath &= attribute expr { text }
attlist.xpath &=
diff --git a/trytond/ir/ui/calendar.rng b/trytond/ir/ui/calendar.rng
index 800d86c..bec99ac 100644
--- a/trytond/ir/ui/calendar.rng
+++ b/trytond/ir/ui/calendar.rng
@@ -60,7 +60,10 @@
<element name="xpath">
<ref name="attlist.xpath"/>
<zeroOrMore>
- <ref name="field"/>
+ <choice>
+ <ref name="field"/>
+ <ref name="calendar"/>
+ </choice>
</zeroOrMore>
</element>
</define>
diff --git a/trytond/ir/ui/form.rng b/trytond/ir/ui/form.rng
index bacb1a9..27d70d3 100644
--- a/trytond/ir/ui/form.rng
+++ b/trytond/ir/ui/form.rng
@@ -365,7 +365,7 @@
</define>
<define name="attlist.field" combine="interleave">
<optional>
- <attribute name="toolbar" a:defaultValue="1">
+ <attribute name="toolbar" a:defaultValue="0">
<choice>
<value>0</value>
<value>1</value>
diff --git a/trytond/ir/view/action_report_form.xml b/trytond/ir/view/action_report_form.xml
index ac77fd5..de9363c 100644
--- a/trytond/ir/view/action_report_form.xml
+++ b/trytond/ir/view/action_report_form.xml
@@ -23,6 +23,8 @@ this repository contains the full copyright notices and license terms. -->
<field name="template_extension"/>
<label name="extension"/>
<field name="extension"/>
+ <label name="single"/>
+ <field name="single"/>
<label name="direct_print"/>
<field name="direct_print"/>
<newline/>
diff --git a/trytond/ir/view/translation_list.xml b/trytond/ir/view/translation_list.xml
index 56be91a..b43806f 100644
--- a/trytond/ir/view/translation_list.xml
+++ b/trytond/ir/view/translation_list.xml
@@ -2,8 +2,8 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree editable="bottom">
- <field name="src"/>
- <field name="value"/>
+ <field name="src" widget="char"/>
+ <field name="value" widget="char"/>
<field name="fuzzy"/>
<field name="name"/>
<field name="lang"/>
diff --git a/trytond/model/fields/dict.py b/trytond/model/fields/dict.py
index 5b24dbe..6490f77 100644
--- a/trytond/model/fields/dict.py
+++ b/trytond/model/fields/dict.py
@@ -25,9 +25,12 @@ class Dict(Field):
def get(self, ids, model, name, values=None):
dicts = dict((id, None) for id in ids)
for value in values or []:
- if value[name]:
- dicts[value['id']] = json.loads(value[name],
- object_hook=JSONDecoder())
+ data = value[name]
+ if data:
+ # If stored as JSON conversion is done on backend
+ if isinstance(data, basestring):
+ data = json.loads(data, object_hook=JSONDecoder())
+ dicts[value['id']] = data
return dicts
def sql_format(self, value):
diff --git a/trytond/model/fields/many2many.py b/trytond/model/fields/many2many.py
index 09195c6..fcb0a68 100644
--- a/trytond/model/fields/many2many.py
+++ b/trytond/model/fields/many2many.py
@@ -233,14 +233,15 @@ class Many2Many(Field):
action = value[0]
args = value[1:]
actions[action](ids, *args)
- if relation_to_create:
- Relation.create(relation_to_create)
+ # Ordered operations to avoid uniqueness/overlapping constraints
if relation_to_delete:
Relation.delete(relation_to_delete)
- if target_to_write:
- Target.write(*target_to_write)
if target_to_delete:
Target.delete(target_to_delete)
+ if target_to_write:
+ Target.write(*target_to_write)
+ if relation_to_create:
+ Relation.create(relation_to_create)
def get_target(self):
'Return the target model'
@@ -325,9 +326,12 @@ class Many2Many(Field):
target_operator = 'child_of'
else:
target_operator = 'parent_of'
- query = Target.search([
- (domain[3], target_operator, value),
- ], order=[], query=True)
+ target_domain = [
+ (domain[3], target_operator, value),
+ ]
+ if self.filter:
+ target_domain.append(self.filter)
+ query = Target.search(target_domain, order=[], query=True)
where = (target.in_(query) & (origin != Null))
if history_where:
where &= history_where
@@ -339,13 +343,20 @@ class Many2Many(Field):
return ~expression
return expression
if isinstance(value, basestring):
- targets = Target.search([('rec_name', 'ilike', value)],
- order=[])
+ target_domain = [('rec_name', 'ilike', value)]
+ if self.filter:
+ target_domain.append(self.filter)
+ targets = Target.search(target_domain, order=[])
ids = [t.id for t in targets]
- elif not isinstance(value, (list, tuple)):
- ids = [value]
else:
- ids = value
+ if not isinstance(value, (list, tuple)):
+ ids = [value]
+ else:
+ ids = value
+ if self.filter:
+ targets = Target.search(
+ [('id', 'in', ids), self.filter], order=[])
+ ids = [t.id for t in targets]
if not ids:
expression = Literal(False)
if operator.startswith('not'):
@@ -361,6 +372,9 @@ class Many2Many(Field):
where &= history_where
if origin_where:
where &= origin_where
+ if self.filter:
+ query = Target.search(self.filter, order=[], query=True)
+ where &= target.in_(query)
query = relation.select(origin, where=where)
expression = ~table.id.in_(query)
if operator == '!=':
@@ -385,6 +399,11 @@ class Many2Many(Field):
rule_domain = Rule.domain_get(Relation.__name__, mode='read')
if rule_domain:
relation_domain = [relation_domain, rule_domain]
+ if self.filter:
+ relation_domain = [
+ relation_domain,
+ (self.target, 'where', self.filter),
+ ]
relation_tables = {
None: (relation, None),
}
diff --git a/trytond/model/fields/one2many.py b/trytond/model/fields/one2many.py
index 39ac0e8..d80d170 100644
--- a/trytond/model/fields/one2many.py
+++ b/trytond/model/fields/one2many.py
@@ -213,12 +213,13 @@ class One2Many(Field):
action = value[0]
args = value[1:]
actions[action](ids, *args)
- if to_create:
- Target.create(to_create)
- if to_write:
- Target.write(*to_write)
+ # Ordered operations to avoid uniqueness/overlapping constraints
if to_delete:
Target.delete(to_delete)
+ if to_write:
+ Target.write(*to_write)
+ if to_create:
+ Target.create(to_create)
def get_target(self):
'Return the target Model'
@@ -262,6 +263,9 @@ class One2Many(Field):
where &= history_where
if origin_where:
where &= origin_where
+ if self.filter:
+ query = Target.search(self.filter, order=[], query=True)
+ where &= origin.in_(query)
query = target.select(origin, where=where)
expression = ~table.id.in_(query)
if operator == '!=':
@@ -284,6 +288,8 @@ class One2Many(Field):
rule_domain = Rule.domain_get(Target.__name__, mode='read')
if rule_domain:
target_domain = [target_domain, rule_domain]
+ if self.filter:
+ target_domain = [target_domain, self.filter]
target_tables = {
None: (target, None),
}
diff --git a/trytond/model/fields/one2one.py b/trytond/model/fields/one2one.py
index 3b9e322..c32ffb0 100644
--- a/trytond/model/fields/one2one.py
+++ b/trytond/model/fields/one2one.py
@@ -47,6 +47,7 @@ class One2One(Many2Many):
self.origin: record_id,
self.target: value,
})
+ # Ordered operations to avoid uniqueness/overlapping constraints
if to_delete:
Relation.delete(to_delete)
if to_create:
diff --git a/trytond/model/fields/reference.py b/trytond/model/fields/reference.py
index 0e56cd6..e297350 100644
--- a/trytond/model/fields/reference.py
+++ b/trytond/model/fields/reference.py
@@ -6,12 +6,13 @@ from sql import Cast, Literal, Query, Expression
from sql.functions import Substring, Position
from .field import Field
+from .selection import SelectionMixin
from ...transaction import Transaction
from ...pool import Pool
from ...rpc import RPC
-class Reference(Field):
+class Reference(Field, SelectionMixin):
'''
Define a reference field (``str``).
'''
diff --git a/trytond/model/fields/selection.py b/trytond/model/fields/selection.py
index e7fddb0..f6c475a 100644
--- a/trytond/model/fields/selection.py
+++ b/trytond/model/fields/selection.py
@@ -10,7 +10,18 @@ from .field import Field
from ...rpc import RPC
-class Selection(Field):
+class SelectionMixin:
+
+ def translated(self, name=None):
+ "Return a descriptor for the translated value of the field"
+ if name is None:
+ name = self.name
+ if name is None:
+ raise ValueError('Missing name argument')
+ return TranslatedSelection(name)
+
+
+class Selection(Field, SelectionMixin):
'''
Define a selection field (``str``).
'''
@@ -70,14 +81,6 @@ class Selection(Field):
whens.append((column == key, value))
return [Case(*whens, else_=column)]
- def translated(self, name=None):
- "Return a descriptor for the translated value of the field"
- if name is None:
- name = self.name
- if name is None:
- raise ValueError('Missing name argument')
- return TranslatedSelection(name)
-
class TranslatedSelection(object):
'A descriptor for translated value of Selection field'
@@ -86,6 +89,7 @@ class TranslatedSelection(object):
self.name = name
def __get__(self, inst, cls):
+ from ..model import Model
if inst is None:
return self
with Transaction().set_context(getattr(inst, '_context', {})):
@@ -102,4 +106,7 @@ class TranslatedSelection(object):
if value is None or value == '':
if value not in selection:
value = {None: '', '': None}[value]
+ # Use Model __name__ for Reference field
+ elif isinstance(value, Model):
+ value = value.__name__
return selection[value]
diff --git a/trytond/model/modelsql.py b/trytond/model/modelsql.py
index 54a3065..4e66ddb 100644
--- a/trytond/model/modelsql.py
+++ b/trytond/model/modelsql.py
@@ -1051,6 +1051,19 @@ class ModelSQL(ModelStorage):
cls.trigger_delete(records)
+ def get_related_records(Model, field_name, sub_ids):
+ if issubclass(Model, ModelSQL):
+ foreign_table = Model.__table__()
+ foreign_red_sql = reduce_ids(
+ Column(foreign_table, field_name), sub_ids)
+ cursor.execute(*foreign_table.select(foreign_table.id,
+ where=foreign_red_sql))
+ records = Model.browse([x[0] for x in cursor.fetchall()])
+ else:
+ with transaction.set_context(active_test=False):
+ records = Model.search([(field_name, 'in', sub_ids)])
+ return records
+
for sub_ids, sub_records in izip(
grouped_slice(ids), grouped_slice(records)):
sub_ids = list(sub_ids)
@@ -1063,14 +1076,9 @@ class ModelSQL(ModelStorage):
if (not hasattr(Model, 'search')
or not hasattr(Model, 'write')):
continue
- foreign_table = Model.__table__()
- foreign_red_sql = reduce_ids(
- Column(foreign_table, field_name), sub_ids)
- cursor.execute(*foreign_table.select(foreign_table.id,
- where=foreign_red_sql))
- models = Model.browse([x[0] for x in cursor.fetchall()])
- if models:
- Model.write(models, {
+ records = get_related_records(Model, field_name, sub_ids)
+ if records:
+ Model.write(records, {
field_name: None,
})
@@ -1078,14 +1086,9 @@ class ModelSQL(ModelStorage):
if (not hasattr(Model, 'search')
or not hasattr(Model, 'delete')):
continue
- foreign_table = Model.__table__()
- foreign_red_sql = reduce_ids(
- Column(foreign_table, field_name), sub_ids)
- cursor.execute(*foreign_table.select(foreign_table.id,
- where=foreign_red_sql))
- models = Model.browse([x[0] for x in cursor.fetchall()])
- if models:
- Model.delete(models)
+ records = get_related_records(Model, field_name, sub_ids)
+ if records:
+ Model.delete(records)
for Model, field_name in foreign_keys_tocheck:
with Transaction().set_context(_check_access=False):
diff --git a/trytond/model/modelstorage.py b/trytond/model/modelstorage.py
index e1bcc7d..99e3c6e 100644
--- a/trytond/model/modelstorage.py
+++ b/trytond/model/modelstorage.py
@@ -52,7 +52,7 @@ class ModelStorage(Model):
create_date = fields.Timestamp('Create Date', readonly=True)
write_uid = fields.Many2One('res.user', 'Write User', readonly=True)
write_date = fields.Timestamp('Write Date', readonly=True)
- rec_name = fields.Function(fields.Char('Name'), 'get_rec_name',
+ rec_name = fields.Function(fields.Char('Record Name'), 'get_rec_name',
searcher='search_rec_name')
@classmethod
@@ -66,12 +66,12 @@ class ModelStorage(Model):
'write': RPC(readonly=False,
instantiate=slice(0, None, 2)),
'delete': RPC(readonly=False, instantiate=0),
- 'copy': RPC(readonly=False, instantiate=0,
+ 'copy': RPC(readonly=False, instantiate=0, unique=False,
result=lambda r: map(int, r)),
'search': RPC(result=lambda r: map(int, r)),
'search_count': RPC(),
'search_read': RPC(),
- 'export_data': RPC(instantiate=0),
+ 'export_data': RPC(instantiate=0, unique=False),
'import_data': RPC(readonly=False),
})
cls._constraints = []
@@ -270,10 +270,16 @@ class ModelStorage(Model):
if 'state' in cls._defaults:
default['state'] = cls._defaults['state']()
+ def is_readonly(Model):
+ return (not issubclass(Model, ModelStorage)
+ or (hasattr(Model, 'table_query')
+ and Model.table_query()))
+
def convert_data(field_defs, data):
data = data.copy()
for field_name in field_defs:
ftype = field_defs[field_name]['type']
+ field = cls._fields[field_name]
if field_name in (
'create_date',
@@ -285,9 +291,8 @@ class ModelStorage(Model):
if field_name in default:
data[field_name] = default[field_name]
- elif (isinstance(cls._fields[field_name], fields.Function)
- and not isinstance(
- cls._fields[field_name], fields.MultiValue)):
+ if (isinstance(field, fields.Function)
+ and not isinstance(field, fields.MultiValue)):
del data[field_name]
elif ftype in ('many2one', 'one2one'):
try:
@@ -296,10 +301,14 @@ class ModelStorage(Model):
except Exception:
pass
elif ftype in ('one2many',):
- if data[field_name]:
+ if is_readonly(field.get_target()):
+ del data[field_name]
+ elif data[field_name]:
data[field_name] = [('copy', data[field_name])]
elif ftype == 'many2many':
- if data[field_name]:
+ if is_readonly(pool.get(field.relation_name)):
+ del data[field_name]
+ elif data[field_name]:
data[field_name] = [('add', data[field_name])]
if 'id' in data:
del data['id']
@@ -991,12 +1000,16 @@ class ModelStorage(Model):
validate_domain(field)
- def required_test(value, field_name):
+ def required_test(value, field_name, field):
if (isinstance(value, (type(None), type(False), list,
tuple, basestring, dict))
and not value):
cls.raise_user_error('required_validation_record',
error_args=cls._get_error_args(field_name))
+ if (field._type == 'reference'
+ and not isinstance(value, ModelStorage)):
+ cls.raise_user_error('required_validation_record',
+ error_args=cls._get_error_args(field_name))
# validate states required
if field.states and 'required' in field.states:
if is_pyson(field.states['required']):
@@ -1012,16 +1025,17 @@ class ModelStorage(Model):
required = PYSONDecoder(env).decode(pyson_required)
if required:
required_test(getattr(record, field_name),
- field_name)
+ field_name, field)
else:
if field.states['required']:
for record in records:
required_test(getattr(record, field_name),
- field_name)
+ field_name, field)
# validate required
if field.required:
for record in records:
- required_test(getattr(record, field_name), field_name)
+ required_test(
+ getattr(record, field_name), field_name, field)
# validate size
if hasattr(field, 'size') and field.size is not None:
for record in records:
@@ -1424,7 +1438,7 @@ class ModelStorage(Model):
to_write = []
for target in targets:
if target.id is None or target.id < 0:
- if field._type == 'one2many':
+ if field._type == 'one2many' and field.field:
# Don't store old target link
setattr(target, field.field, None)
to_create.append(target._save_values)
@@ -1457,9 +1471,10 @@ class ModelStorage(Model):
save_values = {}
to_create = []
to_write = []
- transaction = records[0]._transaction
- user = records[0]._user
- context = records[0]._context
+ first = next(iter(records))
+ transaction = first._transaction
+ user = first._user
+ context = first._context
for record in records:
if (record._transaction != transaction
or user != record._user
diff --git a/trytond/model/modelview.py b/trytond/model/modelview.py
index 3c8be21..a92c6ef 100644
--- a/trytond/model/modelview.py
+++ b/trytond/model/modelview.py
@@ -410,6 +410,11 @@ class ModelView(Model):
if colspan is not None:
element.attrib['colspan'] = colspan
+ # Remove empty pages
+ if type == 'form':
+ for page in tree.xpath('//page[not(descendant::*)]'):
+ page.getparent().remove(page)
+
if type == 'tree':
ViewTreeWidth = pool.get('ir.ui.view_tree_width')
viewtreewidth_ids = ViewTreeWidth.search([
@@ -590,6 +595,8 @@ class ModelView(Model):
transaction = Transaction()
check_access = transaction.context.get('_check_access')
+ assert len(records) == len(set(records)), "Duplicate records"
+
if (transaction.user != 0) and check_access:
ModelAccess.check(cls.__name__, 'read')
groups = set(User.get_groups())
@@ -715,7 +722,18 @@ class ModelView(Model):
target_changed['id'] = target.id
value['update'].append(target_changed)
else:
- value['add'].append((i, target._default_values))
+ if isinstance(target, ModelView):
+ # Ensure initial values are returned because target
+ # was instantiated on server side.
+ target_init_values = target._init_values
+ target._init_values = None
+ try:
+ added_values = target._changed_values
+ finally:
+ target._init_values = target_init_values
+ else:
+ added_values = target._default_values
+ value['add'].append((i, added_values))
if not value['remove']:
del value['remove']
if not value:
diff --git a/trytond/model/multivalue.py b/trytond/model/multivalue.py
index f3d7e60..de1fe44 100644
--- a/trytond/model/multivalue.py
+++ b/trytond/model/multivalue.py
@@ -60,14 +60,14 @@ class MultiValueMixin(object):
else:
return value
- def set_multivalue(self, name, value, _save=True, **pattern):
+ def set_multivalue(self, name, value, save=True, **pattern):
Value = self.multivalue_model(name)
values = self.__values(name, pattern, match_none=True)
if not values:
values = [self.multivalue_record(name, **pattern)]
for record in values:
setattr(record, name, value)
- if _save:
+ if save:
Value.save(values)
else:
return values
@@ -77,7 +77,7 @@ class MultiValueMixin(object):
Value = cls.multivalue_model(name)
to_save = []
for record in records:
- to_save.extend(record.set_multivalue(name, val, _save=False))
+ to_save.extend(record.set_multivalue(name, val, save=False))
Value.save(to_save)
diff --git a/trytond/model/workflow.py b/trytond/model/workflow.py
index 940eec9..02b80b6 100644
--- a/trytond/model/workflow.py
+++ b/trytond/model/workflow.py
@@ -23,6 +23,8 @@ class Workflow(object):
filtered = []
to_update = OrderedDict()
+ assert len(records) == len(set(records)), "Duplicate records"
+
for record in records:
current_state = getattr(record, cls._transition_state)
transition = (current_state, state)
diff --git a/trytond/modules/__init__.py b/trytond/modules/__init__.py
index b25506f..0c6b020 100644
--- a/trytond/modules/__init__.py
+++ b/trytond/modules/__init__.py
@@ -16,6 +16,7 @@ from sql.functions import CurrentTimestamp
import trytond.tools as tools
from trytond.config import config
+from trytond.exceptions import MissingDependenciesException
from trytond.transaction import Transaction
from trytond import backend
import trytond.convert as convert
@@ -38,8 +39,7 @@ def update_egg_modules():
try:
import pkg_resources
for ep in pkg_resources.iter_entry_points('trytond.modules'):
- mod_name = ep.module_name.split('.')[-1]
- EGG_MODULES[mod_name] = ep
+ EGG_MODULES[ep.name] = ep
except ImportError:
pass
update_egg_modules()
@@ -187,7 +187,7 @@ def create_graph(module_list):
continue
missings |= set((x for x in deps if x not in graph))
if missings:
- raise Exception('Missing dependencies: %s' % list(missings
+ raise MissingDependenciesException(list(missings
- set((p[0] for p in packages))))
return graph, packages, later
@@ -379,10 +379,15 @@ def register_classes():
MODULES.append(module)
-def load_modules(database_name, pool, update=None, lang=None):
+def load_modules(
+ database_name, pool, update=None, lang=None, installdeps=False):
res = True
+ if update:
+ update = update[:]
+ else:
+ update = []
- def _load_modules():
+ def _load_modules(update):
global res
TableHandler = backend.get('TableHandler')
transaction = Transaction()
@@ -414,9 +419,15 @@ def load_modules(database_name, pool, update=None, lang=None):
where=ir_module.state.in_(('activated', 'to upgrade',
'to remove'))))
module_list = [name for (name,) in cursor.fetchall()]
- if update:
+ graph = None
+ while graph is None:
module_list += update
- graph = create_graph(module_list)[0]
+ try:
+ graph = create_graph(module_list)[0]
+ except MissingDependenciesException as e:
+ if not installdeps:
+ raise
+ update += e.missings
load_module_graph(graph, pool, update, lang)
@@ -448,11 +459,11 @@ def load_modules(database_name, pool, update=None, lang=None):
if not Transaction().connection:
with Transaction().start(database_name, 0):
- _load_modules()
+ _load_modules(update)
else:
with Transaction().new_transaction(), \
Transaction().set_user(0), \
Transaction().reset_context():
- _load_modules()
+ _load_modules(update)
return res
diff --git a/trytond/pool.py b/trytond/pool.py
index 3b9a6ee..d110c77 100644
--- a/trytond/pool.py
+++ b/trytond/pool.py
@@ -133,7 +133,7 @@ class Pool(object):
'''
return self._locks[self.database_name]
- def init(self, update=None, lang=None):
+ def init(self, update=None, lang=None, installdeps=False):
'''
Init pool
Set update to proceed to update
@@ -152,7 +152,7 @@ class Pool(object):
for type in self.classes.keys():
self._pool[self.database_name][type] = {}
restart = not load_modules(self.database_name, self, update=update,
- lang=lang)
+ lang=lang, installdeps=installdeps)
if restart:
self.init()
diff --git a/trytond/protocols/wrappers.py b/trytond/protocols/wrappers.py
index e493a12..9dfccfe 100644
--- a/trytond/protocols/wrappers.py
+++ b/trytond/protocols/wrappers.py
@@ -54,20 +54,18 @@ class Request(_Request):
@cached_property
def user_id(self):
- database_name = self.view_args['database_name']
+ database_name = self.view_args.get('database_name')
+ if not database_name:
+ return None
auth = self.authorization
if not auth:
- abort(401)
+ return None
if auth.type == 'session':
user_id = security.check(
database_name, auth.get('userid'), auth.get('session'))
- if not user_id:
- abort(403)
else:
user_id = security.login(
database_name, auth.username, auth, cache=False)
- if not user_id:
- abort(401)
return user_id
@@ -94,6 +92,13 @@ def parse_authorization_header(value):
})
+def set_max_request_size(size):
+ def decorator(func):
+ func.max_request_size = size
+ return func
+ return decorator
+
+
def with_pool(func):
@wraps(func)
def wrapper(request, database_name, *args, **kwargs):
diff --git a/trytond/report/report.py b/trytond/report/report.py
index 5ed1f74..bec5022 100644
--- a/trytond/report/report.py
+++ b/trytond/report/report.py
@@ -1,10 +1,20 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-import os
import datetime
+import os
+import subprocess
import tempfile
import warnings
-import subprocess
+import zipfile
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+from io import BytesIO
+
+try:
+ import html2text
+except ImportError:
+ html2text = None
+
warnings.simplefilter("ignore")
import relatorio.reporting
warnings.resetwarnings()
@@ -26,7 +36,7 @@ MIMETYPES = {
'odp': 'application/vnd.oasis.opendocument.presentation',
'ods': 'application/vnd.oasis.opendocument.spreadsheet',
'odg': 'application/vnd.oasis.opendocument.graphics',
- 'plain': 'text/plain',
+ 'txt': 'text/plain',
'xml': 'text/xml',
'html': 'text/html',
'xhtml': 'text/xhtml',
@@ -144,23 +154,38 @@ class Report(URLMixin, PoolBase):
else:
action_report = ActionReport(action_id)
- records = None
+ records = []
model = action_report.model or data.get('model')
if model:
records = cls._get_records(ids, model, data)
- report_context = cls.get_context(records, data)
- oext, content = cls.convert(action_report,
- cls.render(action_report, report_context))
+ if action_report.single and len(records) > 1:
+ content = BytesIO()
+ with zipfile.ZipFile(content, 'w') as content_zip:
+ for record in records:
+ oext, rcontent = cls._execute(
+ [record], data, action_report)
+ rfilename = '%s-%s.%s' % (
+ record.id, record.rec_name, oext)
+ content_zip.writestr(rfilename, rcontent)
+ content = content.getvalue()
+ oext = 'zip'
+ else:
+ oext, content = cls._execute(records, data, action_report)
if not isinstance(content, unicode):
content = bytearray(content) if bytes == str else bytes(content)
return (oext, content, action_report.direct_print, action_report.name)
@classmethod
+ def _execute(cls, records, data, action):
+ report_context = cls.get_context(records, data)
+ return cls.convert(action, cls.render(action, report_context))
+
+ @classmethod
def _get_records(cls, ids, model, data):
pool = Pool()
Model = pool.get(model)
- class TranslateModel:
+ class TranslateModel(object):
_languages = {}
def __init__(self, id):
@@ -180,6 +205,15 @@ class Report(URLMixin, PoolBase):
id2record = TranslateModel._languages[self._language]
record = id2record[self.id]
return getattr(record, name)
+
+ def __int__(self):
+ return int(self.id)
+
+ def __str__(self):
+ return '%s,%s' % (Model.__name__, self.id)
+
+ def __unicode__(self):
+ return u'%s,%s' % (Model.__name__, self.id)
return [TranslateModel(id) for id in ids]
@classmethod
@@ -192,6 +226,7 @@ class Report(URLMixin, PoolBase):
report_context['context'] = Transaction().context
report_context['user'] = User(Transaction().user)
report_context['records'] = records
+ report_context['record'] = records[0] if records else None
report_context['format_date'] = cls.format_date
report_context['format_currency'] = cls.format_currency
report_context['format_number'] = cls.format_number
@@ -298,3 +333,40 @@ class Report(URLMixin, PoolBase):
return Lang.format(lang, '%.' + str(digits) + 'f', value,
grouping=grouping, monetary=monetary)
+
+
+def get_email(report, record, languages):
+ "Return email.mime and title from the report execution"
+ pool = Pool()
+ ActionReport = pool.get('ir.action.report')
+ report_id = None
+ if isinstance(report, Report):
+ Report_ = report
+ else:
+ if isinstance(report, ActionReport):
+ report_name = report.report_name
+ report_id = report.id
+ else:
+ report_name = report
+ Report_ = pool.get(report_name, type='report')
+ converter = None
+ msg = MIMEMultipart('alternative')
+ msg.add_header('Content-Language', ', '.join(l.code for l in languages))
+ for language in languages:
+ with Transaction().set_context(language=language.code):
+ ext, content, _, title = Report_.execute(
+ [record.id], {
+ 'action_id': report_id,
+ 'language': language,
+ })
+ if ext == 'html' and html2text:
+ if not converter:
+ converter = html2text.HTML2Text()
+ part = MIMEText(
+ converter.handle(content), 'plain', _charset='utf-8')
+ part.add_header('Content-Language', language.code)
+ msg.attach(part)
+ part = MIMEText(content, ext, _charset='utf-8')
+ part.add_header('Content-Language', language.code)
+ msg.attach(part)
+ return msg, title
diff --git a/trytond/res/ir.py b/trytond/res/ir.py
index bdc2ded..0c7f0e9 100644
--- a/trytond/res/ir.py
+++ b/trytond/res/ir.py
@@ -3,6 +3,7 @@
from ..model import ModelSQL, fields
from .. import backend
from ..pool import Pool, PoolMeta
+from ..transaction import Transaction
__all__ = [
'UIMenuGroup', 'ActionGroup', 'ModelFieldGroup', 'ModelButtonGroup',
@@ -24,10 +25,11 @@ class UIMenuGroup(ModelSQL):
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
+ transaction = Transaction()
# Migration from 1.0 table name change
TableHandler.table_rename('ir_ui_menu_group_rel', cls._table)
- TableHandler.sequence_rename('ir_ui_menu_group_rel_id_seq',
- cls._table + '_id_seq')
+ transaction.database.sequence_rename(transaction.connection,
+ 'ir_ui_menu_group_rel_id_seq', cls._table + '_id_seq')
# Migration from 2.0 menu_id and gid renamed into menu group
table = TableHandler(cls, module_name)
table.column_rename('menu_id', 'menu')
@@ -65,10 +67,11 @@ class ActionGroup(ModelSQL):
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
+ transaction = Transaction()
# Migration from 1.0 table name change
TableHandler.table_rename('ir_action_group_rel', cls._table)
- TableHandler.sequence_rename('ir_action_group_rel_id_seq',
- cls._table + '_id_seq')
+ transaction.database.sequence_rename(transaction.connection,
+ 'ir_action_group_rel_id_seq', cls._table + '_id_seq')
# Migration from 2.0 action_id and gid renamed into action and group
table = TableHandler(cls, module_name)
table.column_rename('action_id', 'action')
@@ -119,10 +122,12 @@ class ModelFieldGroup(ModelSQL):
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
+ database = Transaction().database
+ transaction = Transaction()
# Migration from 1.0 table name change
TableHandler.table_rename('ir_model_field_group_rel', cls._table)
- TableHandler.sequence_rename('ir_model_field_group_rel_id_seq',
- cls._table + '_id_seq')
+ transaction.database.sequence_rename(transaction.connection,
+ 'ir_model_field_group_rel_id_seq', cls._table + '_id_seq')
table = TableHandler(cls, module_name)
# Migration from 2.6: field_id and group_id renamed to field and group
table.column_rename('field_id', 'field')
@@ -189,10 +194,11 @@ class RuleGroupGroup(ModelSQL):
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
+ transaction = Transaction()
# Migration from 1.0 table name change
TableHandler.table_rename('group_rule_group_rel', cls._table)
- TableHandler.sequence_rename('group_rule_group_rel_id_seq',
- cls._table + '_id_seq')
+ transaction.database.sequence_rename(transaction.connection,
+ 'group_rule_group_rel_id_seq', cls._table + '_id_seq')
# Migration from 2.0 rule_group_id and group_id renamed into rule_group
# and group
table = TableHandler(cls, module_name)
@@ -212,10 +218,11 @@ class RuleGroupUser(ModelSQL):
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
+ transaction = Transaction()
# Migration from 1.0 table name change
TableHandler.table_rename('user_rule_group_rel', cls._table)
- TableHandler.sequence_rename('user_rule_group_rel_id_seq',
- cls._table + '_id_seq')
+ transaction.database.sequence_rename(transaction.connection,
+ 'user_rule_group_rel_id_seq', cls._table + '_id_seq')
# Migration from 2.0 rule_group_id and user_id renamed into rule_group
# and user
table = TableHandler(cls, module_name)
diff --git a/trytond/res/locale/bg.po b/trytond/res/locale/bg.po
index dec04b3..c284c1e 100644
--- a/trytond/res/locale/bg.po
+++ b/trytond/res/locale/bg.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -65,8 +65,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,8 +101,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -144,8 +144,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -172,8 +172,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -200,8 +200,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -248,8 +248,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -284,8 +284,8 @@ msgid "Menu"
msgstr "Меню"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -329,8 +329,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -413,8 +413,8 @@ msgid "PySON Menu"
msgstr ""
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -461,8 +461,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -493,8 +493,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -531,10 +531,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -579,10 +578,9 @@ msgctxt "field:res.user.login.attempt,login:"
msgid "Login"
msgstr "Потребителско име"
-#, fuzzy
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Име на прикачен файл"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:res.user.login.attempt,write_date:"
@@ -615,8 +613,8 @@ msgid "Name"
msgstr "Име"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Име"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/ca.po b/trytond/res/locale/ca.po
index 8beca43..03a2595 100644
--- a/trytond/res/locale/ca.po
+++ b/trytond/res/locale/ca.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -68,8 +68,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -104,8 +104,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -144,8 +144,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -172,8 +172,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -200,8 +200,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -248,8 +248,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -284,8 +284,8 @@ msgid "Menu"
msgstr "Menú"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -328,8 +328,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -412,8 +412,8 @@ msgid "PySON Menu"
msgstr "Menú PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -460,8 +460,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -492,8 +492,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -528,8 +528,8 @@ msgid "Key"
msgstr "Clau"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -568,8 +568,8 @@ msgid "Login"
msgstr "Nom usuari"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -600,8 +600,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom del registre"
msgctxt "field:res.user.warning,user:"
msgid "User"
@@ -725,7 +725,7 @@ msgstr "Sol·lcitat"
msgctxt "selection:res.user.application,state:"
msgid "Validated"
-msgstr "Validad"
+msgstr "Validada"
msgctxt "view:res.group:"
msgid "Access Permissions"
diff --git a/trytond/res/locale/cs.po b/trytond/res/locale/cs.po
index 66f0afb..41a4642 100644
--- a/trytond/res/locale/cs.po
+++ b/trytond/res/locale/cs.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -64,10 +64,9 @@ msgctxt "field:ir.action-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,10 +100,9 @@ msgctxt "field:ir.model.button-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -142,10 +140,9 @@ msgctxt "field:ir.model.field-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,10 +168,9 @@ msgctxt "field:ir.rule.group-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -200,10 +196,9 @@ msgctxt "field:ir.rule.group-res.user,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -249,10 +244,9 @@ msgctxt "field:ir.sequence.type-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -286,10 +280,9 @@ msgctxt "field:ir.ui.menu-res.group,menu:"
msgid "Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -332,10 +325,9 @@ msgctxt "field:res.group,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -418,10 +410,9 @@ msgctxt "field:res.user,pyson_menu:"
msgid "PySON Menu"
msgstr ""
-#, fuzzy
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -467,10 +458,9 @@ msgctxt "field:res.user-ir.action,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -500,10 +490,9 @@ msgctxt "field:res.user-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -537,10 +526,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -578,10 +566,9 @@ msgctxt "field:res.user.login.attempt,login:"
msgid "Login"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -612,10 +599,9 @@ msgctxt "field:res.user.warning,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/de.po b/trytond/res/locale/de.po
index eec8302..6ed57f7 100644
--- a/trytond/res/locale/de.po
+++ b/trytond/res/locale/de.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -67,8 +67,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -103,8 +103,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Menü"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -327,8 +327,8 @@ msgid "Name"
msgstr "Gruppenname"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -411,8 +411,8 @@ msgid "PySON Menu"
msgstr "PySON Menü"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -459,8 +459,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -491,8 +491,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -527,8 +527,8 @@ msgid "Key"
msgstr "Schlüssel"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -567,8 +567,8 @@ msgid "Login"
msgstr "Anmeldename"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -599,8 +599,8 @@ msgid "Name"
msgstr "Name"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Name"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/es.po b/trytond/res/locale/es.po
index ea6e71d..d0e3f62 100644
--- a/trytond/res/locale/es.po
+++ b/trytond/res/locale/es.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -68,8 +68,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -104,8 +104,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -144,8 +144,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -172,8 +172,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -200,8 +200,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -248,8 +248,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -284,8 +284,8 @@ msgid "Menu"
msgstr "Menú"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -328,8 +328,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -412,8 +412,8 @@ msgid "PySON Menu"
msgstr "Menú PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -460,8 +460,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -492,8 +492,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -528,8 +528,8 @@ msgid "Key"
msgstr "Clave"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -568,8 +568,8 @@ msgid "Login"
msgstr "Nombre usuario"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -600,8 +600,8 @@ msgid "Name"
msgstr "Nombre"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Nombre"
+msgid "Record Name"
+msgstr "Nombre del registro"
msgctxt "field:res.user.warning,user:"
msgid "User"
@@ -725,7 +725,7 @@ msgstr "Solicitado"
msgctxt "selection:res.user.application,state:"
msgid "Validated"
-msgstr "Validado"
+msgstr "Validada"
msgctxt "view:res.group:"
msgid "Access Permissions"
diff --git a/trytond/res/locale/es_419.po b/trytond/res/locale/es_419.po
index e6d89b8..bf11394 100644
--- a/trytond/res/locale/es_419.po
+++ b/trytond/res/locale/es_419.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -67,7 +67,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
@@ -104,7 +104,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
@@ -146,7 +146,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
@@ -175,7 +175,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
@@ -204,7 +204,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
@@ -254,7 +254,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
@@ -291,7 +291,7 @@ msgid "Menu"
msgstr ""
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
@@ -336,7 +336,7 @@ msgid "Name"
msgstr ""
msgctxt "field:res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.group,rule_groups:"
@@ -422,7 +422,7 @@ msgid "PySON Menu"
msgstr ""
msgctxt "field:res.user,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.user,rule_groups:"
@@ -470,7 +470,7 @@ msgid "ID"
msgstr ""
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -504,7 +504,7 @@ msgid "ID"
msgstr ""
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -542,7 +542,7 @@ msgid "Key"
msgstr ""
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.user.application,state:"
@@ -584,7 +584,7 @@ msgid "Login"
msgstr ""
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
@@ -617,7 +617,7 @@ msgid "Name"
msgstr ""
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
diff --git a/trytond/res/locale/fr.po b/trytond/res/locale/fr.po
index bbd7829..9d489a8 100644
--- a/trytond/res/locale/fr.po
+++ b/trytond/res/locale/fr.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -69,8 +69,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -105,8 +105,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -145,8 +145,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -173,8 +173,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -201,8 +201,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -249,8 +249,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -285,8 +285,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -329,8 +329,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -413,8 +413,8 @@ msgid "PySON Menu"
msgstr "Menu PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -461,8 +461,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -493,8 +493,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -529,8 +529,8 @@ msgid "Key"
msgstr "Clé"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -569,8 +569,8 @@ msgid "Login"
msgstr "Identifiant"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -601,8 +601,8 @@ msgid "Name"
msgstr "Nom"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Nom"
+msgid "Record Name"
+msgstr "Nom de l'enregistrement"
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/hu_HU.po b/trytond/res/locale/hu_HU.po
index 2e6f1d1..12861e9 100644
--- a/trytond/res/locale/hu_HU.po
+++ b/trytond/res/locale/hu_HU.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -65,8 +65,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,8 +101,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Menü"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -328,8 +328,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -412,8 +412,8 @@ msgid "PySON Menu"
msgstr "PySON Menü"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -460,8 +460,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -492,8 +492,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -530,10 +530,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -575,8 +574,8 @@ msgid "Login"
msgstr "Bejelentkezés"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -607,8 +606,8 @@ msgid "Name"
msgstr "Név"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Név"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/it_IT.po b/trytond/res/locale/it_IT.po
index d9f264c..3ec7951 100644
--- a/trytond/res/locale/it_IT.po
+++ b/trytond/res/locale/it_IT.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -65,8 +65,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,8 +101,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -328,8 +328,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -413,8 +413,8 @@ msgid "PySON Menu"
msgstr "Menu PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -461,8 +461,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -493,8 +493,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -531,10 +531,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -576,8 +575,8 @@ msgid "Login"
msgstr "Login"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -608,8 +607,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/ja_JP.po b/trytond/res/locale/ja_JP.po
index b3ae2b0..ab66a88 100644
--- a/trytond/res/locale/ja_JP.po
+++ b/trytond/res/locale/ja_JP.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -66,7 +66,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
@@ -103,7 +103,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
@@ -146,7 +146,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
@@ -175,7 +175,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
@@ -203,7 +203,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
@@ -252,7 +252,7 @@ msgid "ID"
msgstr ""
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
@@ -289,7 +289,7 @@ msgid "Menu"
msgstr ""
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
@@ -333,7 +333,7 @@ msgid "Name"
msgstr ""
msgctxt "field:res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.group,rule_groups:"
@@ -419,7 +419,7 @@ msgid "PySON Menu"
msgstr ""
msgctxt "field:res.user,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.user,rule_groups:"
@@ -467,7 +467,7 @@ msgid "ID"
msgstr ""
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -501,7 +501,7 @@ msgid "ID"
msgstr ""
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
@@ -538,7 +538,7 @@ msgid "Key"
msgstr ""
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.user.application,state:"
@@ -579,7 +579,7 @@ msgid "Login"
msgstr ""
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
@@ -611,7 +611,7 @@ msgid "Name"
msgstr ""
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
+msgid "Record Name"
msgstr ""
#, fuzzy
diff --git a/trytond/res/locale/lo.po b/trytond/res/locale/lo.po
index 081a247..9d8b57c 100644
--- a/trytond/res/locale/lo.po
+++ b/trytond/res/locale/lo.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -8,27 +8,27 @@ msgstr "ຊື່ຂອງກຸ່ມຕ້ອງບໍ່ຊໍ້າກັນ
msgctxt "error:res.user:"
msgid "The password can not be the same as user email."
-msgstr ""
+msgstr "ລະຫັດຜ່ານ ບໍ່ສາມາດ ຊິເປັນອັນດຽວກັນກັບຊື່ຜູ້ໃຊ້ ອີເມວລ໌"
msgctxt "error:res.user:"
msgid "The password can not be the same as user login."
-msgstr ""
+msgstr "ລະຫັດຜ່ານ ບໍ່ສາມາດ ເປັນອັນດຽວກັນກັບ ຊື່ ທີ່ໃຊ້ເຊື່ອມຕໍ່ເຂົ້າລະບົບ."
msgctxt "error:res.user:"
msgid "The password can not be the same as user name."
-msgstr ""
+msgstr "ລະຫັດຜ່ານ ບໍ່ສາມາດ ເປັນອັນດຽວກັນກັບ ຊື່ ຜູ້ໃຊ້ງານ."
msgctxt "error:res.user:"
msgid "The password contains too much times the same characters."
-msgstr ""
+msgstr "ລະຫັດຜ່ານ ປະກອບດ້ວຍອັກຂະລະຊໍ້າກັນຫຼາຍໆເທື່ອ."
msgctxt "error:res.user:"
msgid "The password is forbidden."
-msgstr ""
+msgstr "ລະຫັດຜ່ານນີ້ຖືກຫ້າມໃຊ້"
msgctxt "error:res.user:"
msgid "The password is too short."
-msgstr ""
+msgstr "ລະຫັດຜ່ານນີ້ສັ້ນໂພດ."
msgctxt "error:res.user:"
msgid ""
@@ -66,8 +66,8 @@ msgid "ID"
msgstr "ເລກລຳດັບ"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -102,8 +102,8 @@ msgid "ID"
msgstr "ເລກລຳດັບ"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -142,8 +142,8 @@ msgid "ID"
msgstr "ເລກລຳດັບ"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -170,8 +170,8 @@ msgid "ID"
msgstr "ເລກປະຈຳໂຕ"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -198,8 +198,8 @@ msgid "ID"
msgstr "ເລກລຳດັບ"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -246,8 +246,8 @@ msgid "ID"
msgstr "ເລກປະຈຳໂຕ"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -282,8 +282,8 @@ msgid "Menu"
msgstr "ລາຍການຄຳສັ່ງ"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -293,7 +293,6 @@ msgctxt "field:ir.ui.menu-res.group,write_uid:"
msgid "Write User"
msgstr "ຜູ້ບັນທຶກ"
-#, fuzzy
msgctxt "field:res.group,buttons:"
msgid "Buttons"
msgstr "ປຸ່ມ"
@@ -327,8 +326,8 @@ msgid "Name"
msgstr "ຊື່"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -411,8 +410,8 @@ msgid "PySON Menu"
msgstr "ລາຍການຄຳສັ່ງ PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -459,8 +458,8 @@ msgid "ID"
msgstr "ເລກລຳດັບ"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -491,8 +490,8 @@ msgid "ID"
msgstr "ເລກລຳດັບ"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -527,8 +526,8 @@ msgid "Key"
msgstr "ຄຳທີ່ເປັນກຸນແຈ"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -567,8 +566,8 @@ msgid "Login"
msgstr "ເຂົ້າສູ່ລະບົບ"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -599,8 +598,8 @@ msgid "Name"
msgstr "ຊື່"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "ຊື່"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/lt.po b/trytond/res/locale/lt.po
index 66f0afb..41a4642 100644
--- a/trytond/res/locale/lt.po
+++ b/trytond/res/locale/lt.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -64,10 +64,9 @@ msgctxt "field:ir.action-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,10 +100,9 @@ msgctxt "field:ir.model.button-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -142,10 +140,9 @@ msgctxt "field:ir.model.field-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,10 +168,9 @@ msgctxt "field:ir.rule.group-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -200,10 +196,9 @@ msgctxt "field:ir.rule.group-res.user,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -249,10 +244,9 @@ msgctxt "field:ir.sequence.type-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -286,10 +280,9 @@ msgctxt "field:ir.ui.menu-res.group,menu:"
msgid "Menu"
msgstr ""
-#, fuzzy
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -332,10 +325,9 @@ msgctxt "field:res.group,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -418,10 +410,9 @@ msgctxt "field:res.user,pyson_menu:"
msgid "PySON Menu"
msgstr ""
-#, fuzzy
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -467,10 +458,9 @@ msgctxt "field:res.user-ir.action,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -500,10 +490,9 @@ msgctxt "field:res.user-res.group,id:"
msgid "ID"
msgstr ""
-#, fuzzy
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -537,10 +526,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -578,10 +566,9 @@ msgctxt "field:res.user.login.attempt,login:"
msgid "Login"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -612,10 +599,9 @@ msgctxt "field:res.user.warning,name:"
msgid "Name"
msgstr "Namu"
-#, fuzzy
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Namu"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/nl.po b/trytond/res/locale/nl.po
index 5fa996e..893b41f 100644
--- a/trytond/res/locale/nl.po
+++ b/trytond/res/locale/nl.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -69,10 +69,9 @@ msgctxt "field:ir.action-res.group,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.action-res.group,write_date:"
@@ -113,10 +112,9 @@ msgctxt "field:ir.model.button-res.group,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.button-res.group,write_date:"
@@ -162,10 +160,9 @@ msgctxt "field:ir.model.field-res.group,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.model.field-res.group,write_date:"
@@ -197,10 +194,9 @@ msgctxt "field:ir.rule.group-res.group,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -231,10 +227,9 @@ msgctxt "field:ir.rule.group-res.user,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -286,10 +281,9 @@ msgctxt "field:ir.sequence.type-res.group,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
@@ -331,10 +325,9 @@ msgctxt "field:ir.ui.menu-res.group,menu:"
msgid "Menu"
msgstr "Menu"
-#, fuzzy
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:ir.ui.menu-res.group,write_date:"
@@ -382,10 +375,9 @@ msgctxt "field:res.group,name:"
msgid "Name"
msgstr "Naam bijlage"
-#, fuzzy
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -479,10 +471,9 @@ msgctxt "field:res.user,pyson_menu:"
msgid "PySON Menu"
msgstr ""
-#, fuzzy
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -535,10 +526,9 @@ msgctxt "field:res.user-ir.action,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:res.user-ir.action,user:"
@@ -575,10 +565,9 @@ msgctxt "field:res.user-res.group,id:"
msgid "ID"
msgstr "ID"
-#, fuzzy
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:res.user-res.group,user:"
@@ -618,10 +607,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -666,10 +654,9 @@ msgctxt "field:res.user.login.attempt,login:"
msgid "Login"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:res.user.login.attempt,write_date:"
@@ -705,10 +692,9 @@ msgctxt "field:res.user.warning,name:"
msgid "Name"
msgstr "Naam bijlage"
-#, fuzzy
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Naam bijlage"
+msgid "Record Name"
+msgstr ""
#, fuzzy
msgctxt "field:res.user.warning,user:"
diff --git a/trytond/res/locale/pl.po b/trytond/res/locale/pl.po
index ff6c683..0eaf998 100644
--- a/trytond/res/locale/pl.po
+++ b/trytond/res/locale/pl.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -67,8 +67,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -103,8 +103,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -327,8 +327,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -411,8 +411,8 @@ msgid "PySON Menu"
msgstr "Menu PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -459,8 +459,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -491,8 +491,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -527,8 +527,8 @@ msgid "Key"
msgstr "Klucz"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -567,8 +567,8 @@ msgid "Login"
msgstr "Login"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -599,8 +599,8 @@ msgid "Name"
msgstr "Nazwa"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Nazwa"
+msgid "Record Name"
+msgstr "Nazwa rekordu"
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/pt_BR.po b/trytond/res/locale/pt_BR.po
index 94ff352..85b8325 100644
--- a/trytond/res/locale/pt_BR.po
+++ b/trytond/res/locale/pt_BR.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -12,7 +12,7 @@ msgstr "A sena não pode ser a mesma que o email."
msgctxt "error:res.user:"
msgid "The password can not be the same as user login."
-msgstr "A senha não pode ser sa mesma que o usuário."
+msgstr "A senha não pode ser a mesma que o nome de usuário."
msgctxt "error:res.user:"
msgid "The password can not be the same as user name."
@@ -44,7 +44,7 @@ msgstr "Senha Inválida!"
msgctxt "error:res.user:"
msgid "You can not have two users with the same login!"
-msgstr "Você não pode ter dois usuários com o mesmo login!"
+msgstr "Você não pode ter dois usuários com o mesmo nome de usuário!"
msgctxt "field:ir.action-res.group,action:"
msgid "Action"
@@ -67,8 +67,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -103,8 +103,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Menu"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -327,8 +327,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -388,7 +388,7 @@ msgstr "Direção de Idioma"
msgctxt "field:res.user,login:"
msgid "Login"
-msgstr "Login"
+msgstr "Nome de Usuário"
msgctxt "field:res.user,menu:"
msgid "Menu Action"
@@ -411,8 +411,8 @@ msgid "PySON Menu"
msgstr "Menu PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -459,8 +459,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -491,8 +491,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -527,8 +527,8 @@ msgid "Key"
msgstr "Chave"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -564,11 +564,11 @@ msgstr "ID"
msgctxt "field:res.user.login.attempt,login:"
msgid "Login"
-msgstr "Login"
+msgstr "Nome de Usuário"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -599,8 +599,8 @@ msgid "Name"
msgstr "Nome"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Nome"
+msgid "Record Name"
+msgstr "Nome do Registro"
msgctxt "field:res.user.warning,user:"
msgid "User"
@@ -620,7 +620,7 @@ msgstr "Grupos que possuem permissão para editar sequências deste tipo"
msgctxt "help:res.user,actions:"
msgid "Actions that will be run at login"
-msgstr "Ações que serão executadas no login"
+msgstr "Ações que serão executadas ao entrar"
msgctxt "model:ir.action,name:act_group_form"
msgid "Groups"
@@ -708,7 +708,7 @@ msgstr "Init de Configuração de Usuário"
msgctxt "model:res.user.login.attempt,name:"
msgid "Login Attempt"
-msgstr "Tentativa de Login"
+msgstr "Tentativa de Entrar"
msgctxt "model:res.user.warning,name:"
msgid "User Warning"
@@ -744,7 +744,7 @@ msgstr "Validar"
msgctxt "view:res.user.config.start:"
msgid "Be careful that the login must be unique!"
-msgstr "O login deve ser único!"
+msgstr "O nome de usuário deve ser único!"
msgctxt "view:res.user.config.start:"
msgid "You can now add some users into the system."
diff --git a/trytond/res/locale/ru.po b/trytond/res/locale/ru.po
index 3f21691..4b50b83 100644
--- a/trytond/res/locale/ru.po
+++ b/trytond/res/locale/ru.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -65,8 +65,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,8 +101,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Меню"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -328,8 +328,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -412,8 +412,8 @@ msgid "PySON Menu"
msgstr "Меню PySON"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -460,8 +460,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -492,8 +492,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -530,10 +530,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -576,8 +575,8 @@ msgid "Login"
msgstr "Логин"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -608,8 +607,8 @@ msgid "Name"
msgstr "Наименование"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Наименование"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/sl.po b/trytond/res/locale/sl.po
index 9a4e01e..e24f246 100644
--- a/trytond/res/locale/sl.po
+++ b/trytond/res/locale/sl.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -67,8 +67,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -103,8 +103,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "Meni"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -327,8 +327,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -411,8 +411,8 @@ msgid "PySON Menu"
msgstr "PySON meni"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -459,8 +459,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -491,8 +491,8 @@ msgid "ID"
msgstr "ID"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -527,8 +527,8 @@ msgid "Key"
msgstr "Ključ"
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -567,8 +567,8 @@ msgid "Login"
msgstr "Prijava"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -599,8 +599,8 @@ msgid "Name"
msgstr "Naziv"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "Ime"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/locale/zh_CN.po b/trytond/res/locale/zh_CN.po
index 92954c8..1715312 100644
--- a/trytond/res/locale/zh_CN.po
+++ b/trytond/res/locale/zh_CN.po
@@ -1,4 +1,4 @@
-#
+#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
@@ -65,8 +65,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.action-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.action-res.group,write_date:"
msgid "Write Date"
@@ -101,8 +101,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.model.button-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.button-res.group,write_date:"
msgid "Write Date"
@@ -143,8 +143,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.model.field-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.model.field-res.group,write_date:"
msgid "Write Date"
@@ -171,8 +171,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.rule.group-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.group,rule_group:"
msgid "Rule Group"
@@ -199,8 +199,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.rule.group-res.user,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.rule.group-res.user,rule_group:"
msgid "Rule Group"
@@ -247,8 +247,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:ir.sequence.type-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.sequence.type-res.group,sequence_type:"
msgid "Sequence Type"
@@ -283,8 +283,8 @@ msgid "Menu"
msgstr "菜单"
msgctxt "field:ir.ui.menu-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:ir.ui.menu-res.group,write_date:"
msgid "Write Date"
@@ -328,8 +328,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.group,rule_groups:"
msgid "Rules"
@@ -412,8 +412,8 @@ msgid "PySON Menu"
msgstr "PYSON 菜单"
msgctxt "field:res.user,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user,rule_groups:"
msgid "Rules"
@@ -460,8 +460,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:res.user-ir.action,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-ir.action,user:"
msgid "User"
@@ -492,8 +492,8 @@ msgid "ID"
msgstr "标识"
msgctxt "field:res.user-res.group,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user-res.group,user:"
msgid "User"
@@ -530,10 +530,9 @@ msgctxt "field:res.user.application,key:"
msgid "Key"
msgstr ""
-#, fuzzy
msgctxt "field:res.user.application,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.application,state:"
msgid "State"
@@ -575,8 +574,8 @@ msgid "Login"
msgstr "登录"
msgctxt "field:res.user.login.attempt,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.login.attempt,write_date:"
msgid "Write Date"
@@ -607,8 +606,8 @@ msgid "Name"
msgstr "名称"
msgctxt "field:res.user.warning,rec_name:"
-msgid "Name"
-msgstr "名称"
+msgid "Record Name"
+msgstr ""
msgctxt "field:res.user.warning,user:"
msgid "User"
diff --git a/trytond/res/user.py b/trytond/res/user.py
index 83a9539..d98c5c9 100644
--- a/trytond/res/user.py
+++ b/trytond/res/user.py
@@ -729,10 +729,12 @@ class UserGroup(ModelSQL):
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
+ transaction = Transaction()
+
# Migration from 1.0 table name change
TableHandler.table_rename('res_group_user_rel', cls._table)
- TableHandler.sequence_rename('res_group_user_rel_id_seq',
- cls._table + '_id_seq')
+ transaction.database.sequence_rename(transaction.connection,
+ 'res_group_user_rel_id_seq', cls._table + '_id_seq')
# Migration from 2.0 uid and gid rename into user and group
table = TableHandler(cls, module_name)
table.column_rename('uid', 'user')
diff --git a/trytond/rpc.py b/trytond/rpc.py
index 54a18af..72357eb 100644
--- a/trytond/rpc.py
+++ b/trytond/rpc.py
@@ -12,18 +12,20 @@ class RPC(object):
instantiate: The position or the slice of the arguments to be instanciated
result: The function to transform the result
check_access: If access right must be checked
+ unique: Check instances are unique
'''
- __slots__ = ('readonly', 'instantiate', 'result', 'check_access')
+ __slots__ = ('readonly', 'instantiate', 'result', 'check_access', 'unique')
def __init__(self, readonly=True, instantiate=None, result=None,
- check_access=True):
+ check_access=True, unique=True):
self.readonly = readonly
self.instantiate = instantiate
if result is None:
result = lambda r: r
self.result = result
self.check_access = check_access
+ self.unique = unique
def convert(self, obj, *args, **kwargs):
args = list(args)
@@ -48,6 +50,8 @@ class RPC(object):
elif isinstance(data, dict):
return obj(**data)
else:
+ if self.unique and len(data) != len(set(data)):
+ raise ValueError("Duplicate ids")
return obj.browse(data)
if isinstance(self.instantiate, slice):
for i, data in enumerate(args[self.instantiate]):
diff --git a/trytond/sendmail.py b/trytond/sendmail.py
index 4a2a2db..1e9c4c1 100644
--- a/trytond/sendmail.py
+++ b/trytond/sendmail.py
@@ -4,6 +4,7 @@ import logging
import smtplib
import urllib
from email.message import Message
+from urlparse import parse_qs
from .config import config, parse_uri
from .transaction import Transaction
@@ -44,10 +45,15 @@ def get_smtp_server(uri=None):
if uri is None:
uri = config.get('email', 'uri')
uri = parse_uri(uri)
+ extra = {}
+ if uri.query:
+ cast = {'timeout': int}
+ for key, value in parse_qs(uri.query, strict_parsing=True).iteritems():
+ extra[key] = cast.get(key, lambda a: a)(value[0])
if uri.scheme.startswith('smtps'):
- server = smtplib.SMTP_SSL(uri.hostname, uri.port)
+ server = smtplib.SMTP_SSL(uri.hostname, uri.port, **extra)
else:
- server = smtplib.SMTP(uri.hostname, uri.port)
+ server = smtplib.SMTP(uri.hostname, uri.port, **extra)
if 'tls' in uri.scheme:
server.starttls()
diff --git a/trytond/tests/__init__.py b/trytond/tests/__init__.py
index ca7cfc5..103e3be 100644
--- a/trytond/tests/__init__.py
+++ b/trytond/tests/__init__.py
@@ -1,6 +1,12 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+try:
+ import pkg_resources
+except ImportError:
+ pkg_resources = None
+
+
from ..pool import Pool
from .test import *
from .model import *
@@ -108,6 +114,7 @@ def register():
Dict,
DictDefault,
DictRequired,
+ DictJSONB,
Binary,
BinaryDefault,
BinaryRequired,
@@ -138,6 +145,7 @@ def register():
ModelViewChangedValuesTarget,
ModelViewButton,
ModelViewRPC,
+ ModelViewEmptyPage,
MPTT,
ImportDataBoolean,
ImportDataInteger,
@@ -199,6 +207,13 @@ def register():
multivalue.register('tests')
+ if pkg_resources is not None:
+ entry_points = pkg_resources.iter_entry_points('trytond.tests')
+ for test_ep in entry_points:
+ test_module = test_ep.load()
+ if hasattr(test_module, 'register'):
+ test_module.register('tests')
+
def suite():
from .test_tryton import all_suite
diff --git a/trytond/tests/modelview.py b/trytond/tests/modelview.py
index b7c53d7..1f28fcc 100644
--- a/trytond/tests/modelview.py
+++ b/trytond/tests/modelview.py
@@ -10,6 +10,7 @@ __all__ = [
'ModelViewChangedValuesTarget',
'ModelViewButton',
'ModelViewRPC',
+ 'ModelViewEmptyPage',
]
@@ -106,3 +107,8 @@ class ModelViewRPC(ModelView):
@classmethod
def get_function_reference(cls):
pass
+
+
+class ModelViewEmptyPage(ModelView):
+ 'ModelView Empty Page'
+ __name__ = 'test.modelview.empty_page'
diff --git a/trytond/tests/modelview.xml b/trytond/tests/modelview.xml
new file mode 100644
index 0000000..b706003
--- /dev/null
+++ b/trytond/tests/modelview.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<tryton>
+ <record model="ir.ui.view" id="test_modelview_empty_page_view_form">
+ <field name="model">test.modelview.empty_page</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <![CDATA[
+ <form>
+ <notebook>
+ <page id="empty"></page>
+ <page id="non-empty">
+ <label id="foo"/>
+ </page>
+ </notebook>
+ </form>
+ ]]>
+ </field>
+ </record>
+</tryton>
diff --git a/trytond/tests/test.py b/trytond/tests/test.py
index e90c171..4cf4cf7 100644
--- a/trytond/tests/test.py
+++ b/trytond/tests/test.py
@@ -39,7 +39,7 @@ __all__ = [
'Many2ManyFilterDomainRelation',
'Reference', 'ReferenceTarget', 'ReferenceRequired',
'Selection', 'SelectionRequired',
- 'DictSchema', 'Dict', 'DictDefault', 'DictRequired',
+ 'DictSchema', 'Dict', 'DictDefault', 'DictRequired', 'DictJSONB',
'Binary', 'BinaryDefault', 'BinaryRequired', 'BinaryFileStorage',
'Many2OneDomainValidation', 'Many2OneTarget', 'Many2OneOrderBy',
'Many2OneSearch', 'Many2OneTree', 'Many2OneMPTT', 'Many2OneNoForeignKey',
@@ -782,6 +782,12 @@ class DictRequired(ModelSQL):
dico = fields.Dict(None, 'Test Dict', required=True)
+class DictJSONB(ModelSQL):
+ 'Dict JSONB'
+ __name__ = 'test.dict_jsonb'
+ dico = fields.Dict('test.dict.schema', 'Test Dict')
+
+
class Binary(ModelSQL):
'Binary'
__name__ = 'test.binary'
diff --git a/trytond/tests/test_copy.py b/trytond/tests/test_copy.py
index a4c1636..35f98d5 100644
--- a/trytond/tests/test_copy.py
+++ b/trytond/tests/test_copy.py
@@ -45,6 +45,24 @@ class CopyTestCase(unittest.TestCase):
[x.name for x in one2many_copy.one2many])
@with_transaction()
+ def test_one2many_default(self):
+ "Test copy one2many with default"
+ pool = Pool()
+ One2many = pool.get('test.copy.one2many')
+ Target = pool.get('test.copy.one2many.target')
+
+ record = One2many(name="Test")
+ record.save()
+ target = Target(name="Target")
+ target.save()
+
+ record_copy, = One2many.copy(
+ [record], default={'one2many': [target.id]})
+
+ self.assertListEqual(
+ [x.name for x in record_copy.one2many], [target.name])
+
+ @with_transaction()
def test_many2many(self):
'Test copy many2many'
pool = Pool()
@@ -74,6 +92,23 @@ class CopyTestCase(unittest.TestCase):
self.assertEqual([x.name for x in many2many.many2many],
[x.name for x in many2many_copy.many2many])
+ @with_transaction()
+ def test_many2many_default(self):
+ "Test copy many2many with default"
+ pool = Pool()
+ Many2many = pool.get('test.copy.many2many')
+ Target = pool.get('test.copy.many2many.target')
+
+ record = Many2many(name="Test")
+ record.save()
+ target = Target(name="Target")
+ target.save()
+
+ record_copy, = Many2many.copy(
+ [record], default={'many2many': [target.id]})
+
+ self.assertSequenceEqual(record_copy.many2many, [target])
+
def suite():
return unittest.TestLoader().loadTestsFromTestCase(CopyTestCase)
diff --git a/trytond/tests/test_exportdata.py b/trytond/tests/test_exportdata.py
index 93868b1..bd72e7f 100644
--- a/trytond/tests/test_exportdata.py
+++ b/trytond/tests/test_exportdata.py
@@ -341,7 +341,7 @@ class ExportDataTestCase(unittest.TestCase):
ExportData = pool.get('test.export_data')
ExportDataTarget = pool.get('test.export_data.target')
- target1, = ExportDataTarget.create([{}])
+ target1, = ExportDataTarget.create([{'name': "Target test"}])
export1, = ExportData.create([{
'reference': str(target1),
}])
@@ -360,6 +360,14 @@ class ExportDataTestCase(unittest.TestCase):
['reference']),
[[str(target1)], ['']])
+ self.assertEqual(
+ ExportData.export_data([export1], ['reference/rec_name']),
+ [[target1.rec_name]])
+
+ self.assertEqual(
+ ExportData.export_data([export1], ['reference.translated']),
+ [["Target"]])
+
def suite():
return unittest.TestLoader().loadTestsFromTestCase(ExportDataTestCase)
diff --git a/trytond/tests/test_fields.py b/trytond/tests/test_fields.py
index 8ac755b..1d828b1 100644
--- a/trytond/tests/test_fields.py
+++ b/trytond/tests/test_fields.py
@@ -21,6 +21,7 @@ from trytond.exceptions import UserError
from trytond.model import fields
from trytond.pool import Pool
from trytond.config import config
+from trytond import backend
class FieldsTestCase(unittest.TestCase):
@@ -2502,7 +2503,7 @@ class FieldsTestCase(unittest.TestCase):
self.assertEqual(filtered_target.value, 3)
@with_transaction()
- def test_one2many_filter_fomain(self):
+ def test_one2many_filter_domain(self):
'Test one2many with filter and domain'
pool = Pool()
One2ManyFilterDomain = pool.get('test.one2many_filter_domain')
@@ -2516,6 +2517,28 @@ class FieldsTestCase(unittest.TestCase):
self.assertEqual(filtered_target.value, 3)
@with_transaction()
+ def test_one2many_filter_search(self):
+ "Test search on one2many with filter"
+ pool = Pool()
+ One2ManyFilter = pool.get('test.one2many_filter')
+
+ One2ManyFilter.create([{
+ 'targets': [('create', [{'value': -1}])],
+ }])
+
+ result = One2ManyFilter.search([('targets', '!=', None)])
+ self.assertEqual(len(result), 1)
+
+ result = One2ManyFilter.search([('filtered_targets', '!=', None)])
+ self.assertEqual(len(result), 0)
+
+ result = One2ManyFilter.search([('targets.value', '=', -1)])
+ self.assertEqual(len(result), 1)
+
+ result = One2ManyFilter.search([('filtered_targets.value', '=', -1)])
+ self.assertEqual(len(result), 0)
+
+ @with_transaction()
def test_many2many(self):
'Test Many2Many'
pool = Pool()
@@ -2768,6 +2791,36 @@ class FieldsTestCase(unittest.TestCase):
self.assertEqual(filtered_target.value, 3)
@with_transaction()
+ def test_many2many_filter_search(self):
+ "Test search on many2many with filter"
+ pool = Pool()
+ Many2ManyFilter = pool.get('test.many2many_filter')
+
+ Many2ManyFilter.create([{
+ 'targets': [('create', [{'value': -1}])],
+ }])
+
+ result = Many2ManyFilter.search([('targets', '!=', None)])
+ self.assertEqual(len(result), 1)
+
+ result = Many2ManyFilter.search([('filtered_targets', '!=', None)])
+ self.assertEqual(len(result), 0)
+
+ result = Many2ManyFilter.search(
+ [('or_filtered_targets', '!=', None)])
+ self.assertEqual(len(result), 1)
+
+ result = Many2ManyFilter.search([('targets.value', '=', -1)])
+ self.assertEqual(len(result), 1)
+
+ result = Many2ManyFilter.search([('filtered_targets.value', '=', -1)])
+ self.assertEqual(len(result), 0)
+
+ result = Many2ManyFilter.search(
+ [('or_filtered_targets.value', '=', -1)])
+ self.assertEqual(len(result), 1)
+
+ @with_transaction()
def test_many2many_add_to_list(self):
"Test Many2Many add to list of records"
pool = Pool()
@@ -2989,6 +3042,12 @@ class FieldsTestCase(unittest.TestCase):
}])
transaction.rollback()
+ self.assertRaises(UserError, ReferenceRequired.create, [{
+ 'name': 'reference4',
+ 'reference': str(ReferenceTarget()),
+ }])
+ transaction.rollback()
+
target4, = ReferenceTarget.create([{
'name': 'target4_id',
}])
@@ -3125,6 +3184,31 @@ class FieldsTestCase(unittest.TestCase):
[{'dico': {}}])
@with_transaction()
+ @unittest.skipIf(
+ backend.name() != 'postgresql', 'jsonb only suported by postgresql')
+ def test_dict_jsonb(self):
+ 'Test Dict stored as jsonb'
+ pool = Pool()
+ Dict = pool.get('test.dict_jsonb')
+ connection = Transaction().connection
+ cursor = connection.cursor()
+
+ Database = backend.get('Database')
+ if Database().get_version(connection) < (9, 2):
+ return
+
+ cursor.execute('ALTER TABLE "%s" '
+ 'ALTER COLUMN dico TYPE json USING dico::json' % Dict._table)
+
+ dict1, = Dict.create([{
+ 'dico': {'a': 1, 'b': 2},
+ }])
+ self.assert_(dict1.dico == {'a': 1, 'b': 2})
+
+ Dict.write([dict1], {'dico': {'z': 26}})
+ self.assert_(dict1.dico == {'z': 26})
+
+ @with_transaction()
def test_binary(self):
'Test Binary'
pool = Pool()
diff --git a/trytond/tests/test_modelview.py b/trytond/tests/test_modelview.py
index 4a7ac0a..a108da9 100644
--- a/trytond/tests/test_modelview.py
+++ b/trytond/tests/test_modelview.py
@@ -3,6 +3,7 @@
import unittest
from mock import patch
+from lxml import etree
from trytond.tests.test_tryton import activate_module, with_transaction
from trytond.pool import Pool
@@ -297,6 +298,19 @@ class ModelView(unittest.TestCase):
self.assertIn(rpc_name, TestModel.__rpc__)
check_rpc(TestModel.__rpc__[rpc_name], rpc_attrs)
+ @with_transaction()
+ def test_remove_empty_page(self):
+ "Testing the removal of empty pages"
+ pool = Pool()
+ EmptyPage = pool.get('test.modelview.empty_page')
+
+ arch = EmptyPage.fields_view_get(view_type='form')['arch']
+ parser = etree.XMLParser()
+ tree = etree.fromstring(arch, parser=parser)
+ pages = tree.xpath('//page')
+ self.assertEqual(len(pages), 1)
+ self.assertEqual(pages[0].attrib['id'], 'non-empty')
+
def suite():
func = unittest.TestLoader().loadTestsFromTestCase
diff --git a/trytond/tests/test_rpc.py b/trytond/tests/test_rpc.py
index 44bd907..c2c5d0d 100644
--- a/trytond/tests/test_rpc.py
+++ b/trytond/tests/test_rpc.py
@@ -4,7 +4,7 @@ import unittest
from mock import Mock, DEFAULT, call
-from trytond.tests.test_tryton import with_transaction
+from trytond.tests.test_tryton import with_transaction, activate_module
from trytond.rpc import RPC
from trytond.transaction import Transaction
@@ -12,6 +12,10 @@ from trytond.transaction import Transaction
class RPCTestCase(unittest.TestCase):
"Test RPC"
+ @classmethod
+ def setUpClass(cls):
+ activate_module('ir')
+
@with_transaction()
def test_simple(self):
"Test simple"
@@ -81,6 +85,20 @@ class RPCTestCase(unittest.TestCase):
obj.browse.assert_called_once_with([1, 2, 3])
@with_transaction()
+ def test_instantiate_unique(self):
+ "Test instantiate unique"
+ rpc = RPC(instantiate=0, unique=True)
+ obj = Mock()
+
+ rpc.convert(obj, [1, 2], {})
+ obj.browse.assert_called_once_with([1, 2])
+
+ obj.reset_mock()
+
+ with self.assertRaises(ValueError):
+ rpc.convert(obj, [1, 1], {})
+
+ @with_transaction()
def test_instantiate_slice(self):
"Test instantiate with slice"
rpc = RPC(instantiate=slice(0, 2), check_access=False)
diff --git a/trytond/tests/test_sendmail.py b/trytond/tests/test_sendmail.py
index 0177408..6445518 100644
--- a/trytond/tests/test_sendmail.py
+++ b/trytond/tests/test_sendmail.py
@@ -2,6 +2,7 @@
# this repository contains the full copyright notices and license terms.
import unittest
import smtplib
+import sys
from email.message import Message
from mock import Mock, patch, call
@@ -67,6 +68,17 @@ class SendmailTestCase(unittest.TestCase):
SMTP.assert_called_once_with('localhost', 25)
server.starttls.assert_called_once_with()
+ @unittest.skipIf(sys.version_info < (2, 7, 4), "python bug #9374")
+ def test_get_smtp_server_extra_parameters(self):
+ 'Test get_smtp_server uri extra parameters'
+ with patch.object(smtplib, 'SMTP') as SMTP:
+ SMTP.return_value = server = Mock()
+ params = 'timeout=30&local_hostname=smtp.example.com'
+ self.assertEqual(
+ get_smtp_server('smtp://localhost:25?%s' % params), server)
+ SMTP.assert_called_once_with(
+ 'localhost', 25, timeout=30, local_hostname='smtp.example.com')
+
@patch('trytond.sendmail.get_smtp_server')
@with_transaction()
def test_SMTPDataManager(self, get_smtp_server):
diff --git a/trytond/tests/test_tryton.py b/trytond/tests/test_tryton.py
index ff6f90b..25ea9fa 100644
--- a/trytond/tests/test_tryton.py
+++ b/trytond/tests/test_tryton.py
@@ -7,17 +7,23 @@ import unittest
import doctest
import re
import subprocess
+import time
from itertools import chain
import operator
from functools import wraps
+import inspect
+try:
+ import pkg_resources
+except ImportError:
+ pkg_resources = None
from lxml import etree
from sql import Table
from trytond.pool import Pool, isregisteredby
from trytond import backend
-from trytond.model import Workflow
-from trytond.model.fields import get_eval_fields
+from trytond.model import Workflow, ModelSQL, ModelSingleton, fields
+from trytond.model.fields import get_eval_fields, Function
from trytond.tools import is_instance_method
from trytond.transaction import Transaction
from trytond.cache import Cache
@@ -45,7 +51,7 @@ def activate_module(name):
if not db_exist(DB_NAME) and restore_db_cache(name):
return
create_db()
- with Transaction().start(DB_NAME, 1) as transaction:
+ with Transaction().start(DB_NAME, 1, close=True) as transaction:
pool = Pool()
Module = pool.get('ir.module')
@@ -94,10 +100,11 @@ def backup_db_cache(name):
os.makedirs(DB_CACHE)
backend_name = backend.name()
cache_file = _db_cache_file(DB_CACHE, name, backend_name)
- if backend_name == 'sqlite':
- _sqlite_copy(cache_file)
- elif backend_name == 'postgresql':
- _pg_dump(cache_file)
+ if not os.path.exists(cache_file):
+ if backend_name == 'sqlite':
+ _sqlite_copy(cache_file)
+ elif backend_name == 'postgresql':
+ _pg_dump(cache_file)
def _db_cache_file(path, name, backend_name):
@@ -148,7 +155,17 @@ def _pg_restore(cache_file):
options, env = _pg_options()
cmd.extend(options)
cmd.append(cache_file)
- return not subprocess.call(cmd, env=env)
+ try:
+ return not subprocess.call(cmd, env=env)
+ except OSError:
+ cache_name, _ = os.path.splitext(os.path.basename(cache_file))
+ with Transaction().start(
+ None, 0, close=True, autocommit=True, _nocache=True) \
+ as transaction:
+ transaction.database.drop(transaction.connection, DB_NAME)
+ transaction.database.create(
+ transaction.connection, DB_NAME, cache_name)
+ return True
def _pg_dump(cache_file):
@@ -156,7 +173,19 @@ def _pg_dump(cache_file):
options, env = _pg_options()
cmd.extend(options)
cmd.append(DB_NAME)
- return not subprocess.call(cmd, env=env)
+ try:
+ return not subprocess.call(cmd, env=env)
+ except OSError:
+ cache_name, _ = os.path.splitext(os.path.basename(cache_file))
+ # Ensure any connection is left open
+ backend.get('Database')(DB_NAME).close()
+ with Transaction().start(
+ None, 0, close=True, autocommit=True, _nocache=True) \
+ as transaction:
+ transaction.database.create(
+ transaction.connection, cache_name, DB_NAME)
+ open(cache_file, 'a').close()
+ return True
def with_transaction(user=1, context=None):
@@ -201,6 +230,10 @@ class ModuleTestCase(unittest.TestCase):
assert model._rec_name in model._fields, (
'Wrong _rec_name "%s" for %s'
% (model._rec_name, mname))
+ field = model._fields[model._rec_name]
+ assert field._type in {'char', 'text'}, (
+ "Wrong '%s' type for _rec_name of %s'"
+ % (field._type, mname))
@with_transaction()
def test_view(self):
@@ -306,7 +339,16 @@ class ModuleTestCase(unittest.TestCase):
mname, attr))
if attr.startswith('default_'):
- getattr(model, attr)()
+ fname = attr[len('default_'):]
+ if isinstance(model._fields[fname], fields.MultiValue):
+ try:
+ getattr(model, attr)(pattern=None)
+ # get_multivalue may raise an AttributeError
+ # if pattern is not defined on the model
+ except AttributeError:
+ pass
+ else:
+ getattr(model, attr)()
elif attr.startswith('order_'):
tables = {None: (model.__table__(), None)}
getattr(model, attr)(tables)
@@ -436,6 +478,26 @@ class ModuleTestCase(unittest.TestCase):
})
@with_transaction()
+ def test_function_fields(self):
+ "Test function fields methods"
+ for mname, model in Pool().iterobject():
+ if not isregisteredby(model, self.module):
+ continue
+ for field_name, field in model._fields.iteritems():
+ if not isinstance(field, Function):
+ continue
+ for func_name in [field.getter, field.setter, field.searcher]:
+ if not func_name:
+ continue
+ assert getattr(model, func_name, None), (
+ "Missing method '%(func_name)s' "
+ "on model '%(model)s' for field '%(field)s" % {
+ 'func_name': func_name,
+ 'model': model.__name__,
+ 'field': field_name,
+ })
+
+ @with_transaction()
def test_ir_action_window(self):
'Test action windows are correctly defined'
pool = Pool()
@@ -464,6 +526,22 @@ class ModuleTestCase(unittest.TestCase):
continue
Model.search(decoder.decode(action_domain.domain))
+ @with_transaction()
+ def test_modelsingleton_inherit_order(self):
+ 'Test ModelSingleton, ModelSQL, ModelStorage order in the MRO'
+ for mname, model in Pool().iterobject():
+ if not isregisteredby(model, self.module):
+ continue
+ if (not issubclass(model, ModelSingleton)
+ or not issubclass(model, ModelSQL)):
+ continue
+ mro = inspect.getmro(model)
+ singleton_index = mro.index(ModelSingleton)
+ sql_index = mro.index(ModelSQL)
+ assert singleton_index < sql_index, (
+ "ModelSingleton must appear before ModelSQL in the parent "
+ "classes of '%s'." % mname)
+
def db_exist(name=DB_NAME):
Database = backend.get('Database')
@@ -537,7 +615,15 @@ doctest_checker = Py23DocChecker()
class TestSuite(unittest.TestSuite):
def run(self, *args, **kwargs):
- exist = db_exist()
+ DatabaseOperationalError = backend.get('DatabaseOperationalError')
+ while True:
+ try:
+ exist = db_exist()
+ break
+ except DatabaseOperationalError, err:
+ # Retry on connection error
+ sys.stderr.write(str(err))
+ time.sleep(1)
result = super(TestSuite, self).run(*args, **kwargs)
if not exist:
drop_db()
@@ -556,14 +642,28 @@ def all_suite(modules=None):
Return all tests suite of current module
'''
suite_ = suite()
+
+ def add_tests(filename, module_prefix):
+ if not (filename.startswith('test_') and filename.endswith('.py')):
+ return
+ if modules and fn[:-3] not in modules:
+ return
+ modname = module_prefix + '.' + filename[:-3]
+ __import__(modname)
+ module = sys.modules[modname]
+ suite_.addTest(module.suite())
+
for fn in os.listdir(os.path.dirname(__file__)):
- if fn.startswith('test_') and fn.endswith('.py'):
- if modules and fn[:-3] not in modules:
- continue
- modname = 'trytond.tests.' + fn[:-3]
- __import__(modname)
- module = module = sys.modules[modname]
- suite_.addTest(module.suite())
+ add_tests(fn, 'trytond.tests')
+ if pkg_resources is not None:
+ entry_points = pkg_resources.iter_entry_points('trytond.tests')
+ for test_entry_point in entry_points:
+ base_location = os.path.join(
+ test_entry_point.dist.location,
+ *test_entry_point.module_name.split('.'))
+ for fn in os.listdir(base_location):
+ add_tests(fn, test_entry_point.module_name)
+
return suite_
diff --git a/trytond/tests/tools.py b/trytond/tests/tools.py
index c4cff8a..ca15f40 100644
--- a/trytond/tests/tools.py
+++ b/trytond/tests/tools.py
@@ -1,9 +1,11 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-from proteus import config, Model, Wizard
+from proteus import config as pconfig, Model, Wizard
from .test_tryton import restore_db_cache, backup_db_cache, drop_create
+__all__ = ['activate_modules', 'set_user']
+
def activate_modules(modules):
if isinstance(modules, basestring):
@@ -26,6 +28,14 @@ def activate_modules(modules):
def _get_config():
- cfg = config.set_trytond()
+ cfg = pconfig.set_trytond()
cfg.pool.test = True
return cfg
+
+
+def set_user(user, config=None):
+ if not config:
+ config = pconfig.get_config()
+ User = Model.get('res.user', config=config)
+ config.user = int(user)
+ config._context = User.get_preferences(True, {})
diff --git a/trytond/tests/tryton.cfg b/trytond/tests/tryton.cfg
index 6bb32ec..56e40e7 100644
--- a/trytond/tests/tryton.cfg
+++ b/trytond/tests/tryton.cfg
@@ -7,3 +7,4 @@ xml:
sequence.xml
workflow.xml
wizard.xml
+ modelview.xml
diff --git a/trytond/tryton.rnc b/trytond/tryton.rnc
new file mode 100644
index 0000000..fe87698
--- /dev/null
+++ b/trytond/tryton.rnc
@@ -0,0 +1,32 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+tryton = element tryton { attlist.tryton, data* }
+attlist.tryton &= empty
+data = element data { attlist.data, (record | menuitem)* }
+attlist.data &=
+ [ a:defaultValue = "0" ] attribute noupdate { "0" | "1" }?
+attlist.data &=
+ [ a:defaultValue = "0" ] attribute grouped { "0" | "1" }?
+attlist.data &= attribute depends { text }
+record = element record { attlist.record, field* }
+attlist.record &= attribute model { text }
+attlist.record &= attribute id { text }
+attlist.record &=
+ [ a:defaultValue = "0" ] attribute update { "0" | "1" }?
+field = element field { attlist.field, text }
+attlist.field &= attribute name { text }
+attlist.field &= attribute search { text }?
+attlist.field &= attribute ref { text }?
+attlist.field &= attribute eval { text }?
+attlist.field &= attribute pyson { "0" | "1" }?
+attlist.field &= attribute type { "xml" }?
+menuitem = element menuitem { attlist.menuitem, empty }
+attlist.menuitem &= attribute id { text }
+attlist.menuitem &= attribute name { text }?
+attlist.menuitem &= attribute icon { text }?
+attlist.menuitem &= attribute sequence { text }?
+attlist.menuitem &= attribute parent { text }?
+attlist.menuitem &= attribute action { text }?
+attlist.menuitem &= attribute groups { text }?
+attlist.menuitem &= attribute active { text }?
+start = tryton
diff --git a/trytond/wsgi.py b/trytond/wsgi.py
index f767266..f6ef004 100644
--- a/trytond/wsgi.py
+++ b/trytond/wsgi.py
@@ -1,5 +1,6 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+import httplib
import logging
import sys
import traceback
@@ -10,6 +11,7 @@ from werkzeug.exceptions import abort, HTTPException, InternalServerError
import wrapt
+from trytond.config import config
from trytond.protocols.wrappers import Request
from trytond.protocols.jsonrpc import JSONProtocol
from trytond.protocols.xmlrpc import XMLProtocol
@@ -38,12 +40,33 @@ class TrytondWSGI(object):
if request.user_id:
return wrapped(*args, **kwargs)
else:
- abort(303)
+ abort(httplib.UNAUTHORIZED)
+
+ def check_request_size(self, request, size=None):
+ if request.method not in {'POST', 'PUT', 'PATCH'}:
+ return
+ if size is None:
+ if request.user_id:
+ max_size = config.getint(
+ 'request', 'max_size_authenticated')
+ else:
+ max_size = config.getint(
+ 'request', 'max_size')
+ else:
+ max_size = size
+ if max_size:
+ content_length = request.content_length
+ if content_length is None:
+ abort(httplib.LENGTH_REQUIRED)
+ elif content_length > max_size:
+ abort(httplib.REQUEST_ENTITY_TOO_LARGE)
def dispatch_request(self, request):
adapter = self.url_map.bind_to_environ(request.environ)
try:
endpoint, request.view_args = adapter.match()
+ max_request_size = getattr(endpoint, 'max_request_size', None)
+ self.check_request_size(request, max_request_size)
return endpoint(request, **request.view_args)
except HTTPException, e:
return e
@@ -95,3 +118,4 @@ class TrytondWSGI(object):
return self.wsgi_app(environ, start_response)
app = TrytondWSGI()
+import trytond.protocols.dispatcher
--
tryton-server
More information about the tryton-debian-vcs
mailing list