[tryton-debian-vcs] tryton-client branch upstream updated. upstream/3.0.3-1-g5a13755
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Tue Apr 22 13:04:18 UTC 2014
The following commit has been merged in the upstream branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-client.git;a=commitdiff;h=upstream/3.0.3-1-g5a13755
commit 5a1375590fa7b5aeb6342192e197f9a7e6c714a4
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Tue Apr 22 14:20:18 2014 +0200
Adding upstream version 3.2.0.
diff --git a/CHANGELOG b/CHANGELOG
index c47ee1f..4df6535 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,11 +1,21 @@
-Version 3.0.3 - 2014-04-07
-* Bug fixes (see mercurial logs for details)
-
-Version 3.0.2 - 2013-12-04
-* Bug fixes (see mercurial logs for details)
-
-Version 3.0.1 - 2013-11-03
+Version 3.2.0 - 2014-04-21
* Bug fixes (see mercurial logs for details)
+* Add option to show revisions
+* Add a multi selection widget for many2many
+* Remove auto-refresh
+* Add support of domain for non-relation field
+* Allow drag & drop on the attachment button
+* Replace sha widget by password
+* Add Len to PYSON
+* Use a pool of connection
+* Manage client actions from button and wizard
+* Add tree_invisible attribute to button in tree view
+* Add buttons of the view in actions menu
+* Don't evaluate anymore relate action with the record
+* Paste on editable list create new records if needed
+* Drop support of Python 2.6
+* Allow to search on rec_name of Reference fields
+* Use local timezone
* Sanitize report file extension
Version 3.0.0 - 2013-10-21
diff --git a/PKG-INFO b/PKG-INFO
index 6c6833d..b05d04d 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: tryton
-Version: 3.0.3
+Version: 3.2.0
Summary: Tryton client
Home-page: http://www.tryton.org/
Author: Tryton
-Author-email: UNKNOWN
+Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/3.0/
+Download-URL: http://downloads.tryton.org/3.2/
Description: tryton
======
@@ -65,7 +65,8 @@ Description: tryton
http://www.tryton.org/
-Platform: UNKNOWN
+Keywords: business application ERP
+Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: X11 Applications :: GTK
Classifier: Framework :: Tryton
@@ -84,6 +85,5 @@ Classifier: Natural Language :: Slovak
Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Japanese
Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Office/Business
diff --git a/doc/conf.py b/doc/conf.py
index aff51ca..22adaab 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -46,9 +46,9 @@ copyright = u'2008-2011, Anne Krings, Bertrand Chenal, Cédric Krier, \
# built documents.
#
# The short X.Y version.
-version = '3.0'
+version = '3.2'
# The full version, including alpha/beta/rc tags.
-release = '3.0'
+release = '3.2'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/doc/installation.rst b/doc/installation.rst
index 14ecd9c..36b04cf 100644
--- a/doc/installation.rst
+++ b/doc/installation.rst
@@ -4,13 +4,11 @@ Installing tryton
Prerequisites
-------------
- * Python 2.6 or later (http://www.python.org/)
+ * Python 2.7 or later (http://www.python.org/)
* pygtk 2.22 or later (http://www.pygtk.org/)
* librsvg (http://librsvg.sourceforge.net/)
* python-dateutil (http://labix.org/python-dateutil)
- * weakrefset for Python 2.6 (https://code.google.com/p/weakrefset/)
* Optional: simplejson (http://undefined.org/python/#simplejson)
- * Optional: pytz (http://pytz.sourceforge.net/)
* Optional: cdecimal (http://www.bytereef.org/mpdecimal/index.html)
* Optional: GooCalendar (http://code.google.com/p/goocalendar/)
diff --git a/setup.py b/setup.py
index d358a2c..de7b229 100644
--- a/setup.py
+++ b/setup.py
@@ -118,20 +118,29 @@ elif sys.platform == 'darwin':
},
}
+PACKAGE, VERSION, LICENSE, WEBSITE = None, None, None, None
execfile(os.path.join('tryton', 'version.py'))
-WEAKREF = []
-if sys.version_info < (2, 7):
- WEAKREF = ['weakrefset']
+major_version, minor_version, _ = VERSION.split('.', 2)
+major_version = int(major_version)
+minor_version = int(minor_version)
+
+download_url = 'http://downloads.tryton.org/%s.%s/' % (
+ major_version, minor_version)
+if minor_version % 2:
+ VERSION = '%s.%s.dev0' % (major_version, minor_version)
+ download_url = 'hg+http://hg.tryton.org/%s#egg=%s-%s' % (
+ PACKAGE, PACKAGE, VERSION)
dist = setup(name=PACKAGE,
version=VERSION,
description='Tryton client',
long_description=read('README'),
author='Tryton',
+ author_email='issue_tracker at tryton.org',
url=WEBSITE,
- download_url=("http://downloads.tryton.org/" +
- VERSION.rsplit('.', 1)[0] + '/'),
+ download_url=download_url,
+ keywords='business application ERP',
packages=find_packages(),
data_files=data_files,
scripts=['bin/tryton'],
@@ -154,21 +163,21 @@ dist = setup(name=PACKAGE,
'Natural Language :: Slovenian',
'Natural Language :: Japanese',
'Operating System :: OS Independent',
- 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Office/Business',
],
+ platforms='any',
license=LICENSE,
install_requires=[
#"pygtk >= 2.6",
"python-dateutil",
- ] + WEAKREF,
+ ],
extras_require={
- 'timezone': ['pytz'],
'simplejson': ['simplejson'],
'cdecimal': ['cdecimal'],
'calendar': ['GooCalendar'],
},
+ zip_safe=False,
**args
)
diff --git a/share/locale/bg_BG/LC_MESSAGES/tryton.mo b/share/locale/bg_BG/LC_MESSAGES/tryton.mo
index c60d09d..9d9f899 100644
Binary files a/share/locale/bg_BG/LC_MESSAGES/tryton.mo and b/share/locale/bg_BG/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/bg_BG/LC_MESSAGES/tryton.po b/share/locale/bg_BG/LC_MESSAGES/tryton.po
index 1f3ad46..21147c3 100644
--- a/share/locale/bg_BG/LC_MESSAGES/tryton.po
+++ b/share/locale/bg_BG/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 1.5.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2012-04-23 11:06+0200\n"
"Last-Translator: Nickolay Kolev <nickyk at gmx.net>\n"
"Language-Team: bg_BG <LL at li.org>\n"
@@ -64,62 +64,62 @@ msgstr "Не може да запише конфигурационен файл
msgid "Unable to set locale %s"
msgstr "Не може да зададе локални настройки %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Изберете действие"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Не е зададено действие!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton връзка"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Сървър:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Порт:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Избор:"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Вашия избор"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Запис като ..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Винаги игнорирай това предупреждение."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr ""
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Потвърждение"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Грешка при достъп"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -137,50 +137,50 @@ msgstr ""
" - \"Сравняване\" за да видите променената версия;\n"
" - \"Запис \" за да запишете вашата текуща версия."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Сравняване"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Запис"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Грешка"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Съобщаване за грешка"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Грешка в приложението!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Грешка: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "За да съобщите за грешка трябва да имате сметка на <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr ""
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Потребител: "
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Парола:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -188,11 +188,11 @@ msgstr ""
"Тази грешка е вече съобщена от друг потребител..\n"
"За да бъдете информирани потребителя ви е добавен списъка за този проблем"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Създадена е нова грешка с ID"
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -200,11 +200,11 @@ msgstr ""
"Грешка при свързване!\n"
"Грешно потребителско име или парола!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Грешка:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -214,12 +214,12 @@ msgstr ""
"Приложението ще спре да се връзва към сървъра докато не бъде оправен "
"идентификатора му."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Риск за сигурността"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -227,39 +227,39 @@ msgstr ""
"Грешка при свързване!\n"
"Невъзможност да се свърже със сървъра!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Мрежова грешка!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "Г"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "М"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "с"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "д"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "ч"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "м"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr ""
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr ""
@@ -268,257 +268,262 @@ msgstr ""
msgid "Open the calendar <F2>"
msgstr "Отваряне на календара"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Избор на дата"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "г"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "да"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "Истина"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Истина"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Лъжа"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Изход..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Прикачен файл:"
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Действия..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
#, fuzzy
msgid "Relate..."
msgstr "Свързани..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Справки..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "Email..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Печат..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "Файл"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "Потребител"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "Настройки"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr ""
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Помощ"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Търсене"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr ""
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "Свързване..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "Изключване"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "База данни"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "Нова база данни"
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "Възтановяване на база данни..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Архивиране на база данни..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Изтриване на база данни..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "Изход..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "Предпочитания..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "Презареждане"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Превключване на меню"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr ""
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Лента с инструменти"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "По подразбиране"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Текс и икони"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "Икони"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "Текст"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "Лента с меню"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Смяна на бързи клавиши"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "Режим"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "Нормален"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "Форма"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Запазване на ширина/височина"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
#, fuzzy
msgid "Save Tree State"
msgstr "Запазване на състояние разгърнато дърво"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Проверка на правопис"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Позиции на табове"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Отгоре"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Отляво"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Отдясно"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Отдолу"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
#, fuzzy
msgid "_Previous Tab"
msgstr "Предишен"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr ""
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Ограничение при търсене..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "Email..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "Запазване на опции"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "Подсказки..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Бързи клавиши..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "Относно..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
#, fuzzy
msgid "Manage Favorites"
msgstr "Управление на профили"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -526,11 +531,11 @@ msgstr ""
"Следващите действия изискват затваряне на всички прозорци.\n"
"Искате ли да продължите?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Затваряне на таб"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -538,7 +543,7 @@ msgstr ""
"Ще изтриете Tryton база данни.\n"
"Сигурни ли сте че искате да продължите?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -546,28 +551,28 @@ msgstr ""
"Грешна парола за Tryton сървъра\n"
"Моля опитайте отново."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Достъпа отказан!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "Изтриването на базата данни неуспя с грешка:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Изтриването на базата данни неуспешно!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "Базата данни изтрита успешно!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Отваряне на архивиран файл за възтановяване..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -575,11 +580,11 @@ msgstr ""
"Не може да се възтановяви база данни защитена с парола.\n"
"Архивирането и възтановяването трябва да стане ръчно."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "Базата данни е защитена с парола!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -587,19 +592,19 @@ msgstr ""
"Грешна парола за Tryton сървъра.\n"
"Моля опитайте отново."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "Възтановяването на базата данни неуспя с грешка:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Възтановяването на базата неуспешно"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "Възтановяването на базата данни неуспешно"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -607,75 +612,75 @@ msgstr ""
"Не е възможно да се извлече база данни защитена с парола.\n"
"Архивирането и възтановяването трябва да стане ръчно."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Извличането на базата данни неуспя с грешка:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Извличането на базата данни неуспешно!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "Базата данни архивирана успешно!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Нов"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Създаване на нов запис"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Съхраняване"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Съхраняване на този запис"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Превключване"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Превключване на изглед"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "Презареждане"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Презареждане"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "Нов"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "Съхраняване"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Превключване на изглед"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "Презареждане/Обратно"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "Изтриване..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "Затваряне на таб"
@@ -709,28 +714,28 @@ msgstr ""
"адреса на сървъра и порта(обикновенно 8000) не са блокирани.\n"
"Натиснете на 'Промяна' за да смените адреса."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Създаване на нова база данни"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "Създаване"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Създай новата база данни"
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Настройка на сървър"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Връзка към сървъра:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -740,22 +745,22 @@ msgstr ""
"порт'8000' ако сървъра е инсталиран на този компютър. Натиснете 'Промяна'"
" за да промените адреса."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "Промяна"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Настройка на връзката със сървъра..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Парола за Tryton сървъра"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -763,15 +768,15 @@ msgstr ""
"Това е паролата на Tryton сървъра. Тя не е на никой потребител. Тя "
"обикновенно се задава по време на конфигурирането на trytond."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Настройка на нова база данни:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Име:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -782,11 +787,11 @@ msgstr ""
"Позволени символи за букви, цифри и _ (под черта)\n"
"Избягвайте акценти, празен символ или специални символи! Пример: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Език по подразбиране"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -795,11 +800,11 @@ msgstr ""
"Изберете езика по подразбиране за тази база данни. Може да добавите след "
"инсталацията друг език през менюто за администрация."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Парола на администратор:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -811,15 +816,15 @@ msgstr ""
"Потребителско име: admin\n"
"Парола: <Паролата която сте избрали>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Потвърждаване на паролата:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Напишете отново паролата на администратора"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -827,31 +832,31 @@ msgstr ""
"Името на базата данни е ограничено до латински букви, цифри и \"_\" (под "
"черта). Избягвайте акценти, празен символ или специални символи."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Грешни символи в името на базата данни!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
"Новата парола на администратора не съвпада с тази в полето за "
"потвърждение.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Паролата не съвпада!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"За зъздаване на нова база данни са необходими парола за администратор и "
"парола за потвърждение."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Липсва парола за администратор!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -859,15 +864,15 @@ msgstr ""
"Вече съществува база данни с това име.\n"
"Опитайте с друго име на базата данни."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Вече съществува база данни с такова име!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Грешна парола за Tryton сървъра. Моля опитайте отново."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -879,7 +884,7 @@ msgstr ""
"тази база данни! За повече информация вижте съобщинието за грешка.\n"
"Съобщение за грешка:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Грешка при създаване на база данни!"
@@ -927,7 +932,7 @@ msgstr "Изтриване на избраната база данни."
msgid "Choose a Tryton database to delete:"
msgstr "Избор на Tryton база данни за изтриване:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Връзка със сървъра:"
@@ -1018,15 +1023,15 @@ msgstr "Хост:"
msgid "User name:"
msgstr "Потребителско име:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Възтановяване на база данни"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Файл за възтановяването"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1038,15 +1043,15 @@ msgstr ""
"Не може да използвате акценти, празен символ или специални символи! \n"
"Пример: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Име на нова база данни:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Обновяване на база данни:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1054,11 +1059,11 @@ msgstr ""
"Проверка за автоматични обновявания след възтановяване на база данни от "
"предишна Tryton версия."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Възтановяване"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Възтановяване на база данни от файл."
@@ -1098,156 +1103,160 @@ msgstr "Тяло:"
msgid "Attachment:"
msgstr "Прикачен файл:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Предишен"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Предишен запис"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Следващ"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Следващ запис"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Прикачен файл(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Добавяне на прикачен файл към записа"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "Дублиране"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "Предишен"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Следващ"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
#, fuzzy
msgid "_Search"
msgstr "Търсене"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Преглед на логове"
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
#, fuzzy
msgid "A_ttachments..."
msgstr "Прикачен файл:"
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "Действия..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "Свързани..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "Справки..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "Email..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "Печат..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "Извличане на данни..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "Вмъкване на данни..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Прикачен файл(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Трябва да изберете един запис!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Потребител създал:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Дата на създаване:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Последно променен от:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Дата на последна промяна:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Модел:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Наистина ли искате да изтриете този запис?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Наистина ли искате да изтриете тези записи?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Записа не е изтрит!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Записите изтрити!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Работите върху дублиран(и) запис(и)!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Записа съхранен!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Невалидна форма!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " от"
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1255,46 +1264,52 @@ msgstr ""
"Този запис е променен\n"
"искате ли да го запишете ?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Действие"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Започване на действие"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "Свързани"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Отваряне на свързани записи"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Справки"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Отваряне на справка"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Email"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Изращане на справка по Email"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Печат"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Отпечатване на справка"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Неизвестен"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Ограничение"
@@ -1323,6 +1338,20 @@ msgstr "Настройки"
msgid "Current Password:"
msgstr "Текуща парола"
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Предишен"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Избор:"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Бързи клавиши"
@@ -1501,21 +1530,21 @@ msgstr "Добавяне на имена на полета"
msgid "Name"
msgstr "Име"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Какво е името на това извличане?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d заспис съхранен!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d записа съхранени!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1530,26 +1559,26 @@ msgstr ""
msgid "Link"
msgstr "Връзка"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Добавяне"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Изтриване <Del>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Създаване на нов запис <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Изтриване на избрания запис <Del>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Възтановяване на избрания запис <Ins>"
@@ -1572,10 +1601,10 @@ msgstr "Файл за вмъкване:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Отваряне..."
@@ -1599,19 +1628,19 @@ msgstr "Кодиране:"
msgid "Lines to Skip:"
msgstr "Редове за пропускане:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Име на поле"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Първо трябва да изберете файл за вмъкване!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Грешка при отваряне на CSV файл"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Грешка при обработка на файл при поле %s"
@@ -1626,20 +1655,7 @@ msgstr "%d запис вмъкнат!"
msgid "%d records imported!"
msgstr "%d записи вмъкнати!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Грешка при вмъкване!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Помощник"
@@ -1648,45 +1664,41 @@ msgstr "Помощник"
msgid "No String Attr."
msgstr "Няма атрибут низ"
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
#, fuzzy
msgid "ID"
msgstr "д"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
#, fuzzy
msgid "Creation User"
msgstr "Потребител създал:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
#, fuzzy
msgid "Creation Date"
msgstr "Дата на създаване:"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
#, fuzzy
msgid "Modification User"
msgstr "Дата на последна промяна:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
#, fuzzy
msgid "Modification Date"
msgstr "Дата на последна промяна:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
msgid "Unable to set view tree state"
msgstr "Не може да зададе локални настройки %s"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Трябва за изберете запис за използвате връзката! "
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ""
@@ -1694,19 +1706,19 @@ msgstr ""
msgid "F_ilters"
msgstr "Филтри"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr ""
@@ -1737,24 +1749,24 @@ msgstr ""
msgid "Select a File..."
msgstr "Избор на файл"
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Показване само на текст"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr ""
@@ -1771,24 +1783,24 @@ msgstr "Всички файлове"
msgid "Images"
msgstr "Изображения"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
#, fuzzy
msgid "Translation"
msgstr "Добавяне на превод"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Редактиране"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Неясно"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Трябва да съхраните записа преди да добавите преводи!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Няма наличен друг език!"
@@ -1803,12 +1815,12 @@ msgstr "Съхраняване на този запис"
msgid "Remove selected record <Del>"
msgstr "Изтриване на избрания запис <Del>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Отваряне на запис"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Тъсене на запис"
@@ -1901,15 +1913,10 @@ msgstr "PNG изображение (*.png)"
msgid "Image size too large!"
msgstr "Размера на изображението е много голям!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Неизвестен"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Превод на изглед"
diff --git a/share/locale/ca_ES/LC_MESSAGES/tryton.mo b/share/locale/ca_ES/LC_MESSAGES/tryton.mo
index a344cd8..a84d937 100644
Binary files a/share/locale/ca_ES/LC_MESSAGES/tryton.mo and b/share/locale/ca_ES/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ca_ES/LC_MESSAGES/tryton.po b/share/locale/ca_ES/LC_MESSAGES/tryton.po
index 95339bc..bbc5dd8 100644
--- a/share/locale/ca_ES/LC_MESSAGES/tryton.po
+++ b/share/locale/ca_ES/LC_MESSAGES/tryton.po
@@ -4,14 +4,15 @@
# Sergi Almacellas Abellana <sergi at koolpi.com> 2012.
# Jordi Esteve Cusiné <jesteve at zikzakmedia.com> 2012.
#
+# , 2014.
msgid ""
msgstr ""
"Project-Id-Version: tryton 2.4.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-14 14:29+0100\n"
-"Last-Translator: Sergi Almacellas Abellana <sergi at koolpi.com>\n"
-"Language-Team: <tryton-es at googlegroups.com>\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-17 18:49+0200\n"
+"Last-Translator: \n"
+"Language-Team: Catalan <kde-i18n-ca at kde.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -65,62 +66,62 @@ msgstr "No s'ha pogut escriure el fitxer configuració %s"
msgid "Unable to set locale %s"
msgstr "No s'ha pogut establir l'idioma %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Seleccioneu la vostra acció"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "No s'ha definit cap acció."
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Connexió a Tryton"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Servidor:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Port:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Selecció"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "La vostra selecció:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Desa com..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Ignora sempre aquest advertiment."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "Voleu continuar?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Confirmació"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Excepció de concurrència"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -132,56 +133,56 @@ msgid ""
msgstr ""
"<b>Avís de concurrència d'escriptura:</b>\n"
"\n"
-"Aquest registre ha estat modificat mentre l'editaveu.\n"
+"Aquest registre ha estat modificat mentre l'editàveu.\n"
" Trieu:\n"
" - \"Cancel·la\" per no desar;\n"
" - \"Compara\" per veure la versió modificada:\n"
" - \"Desa de totes formes\" per desar els vostres canvis."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Compara"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Desa de totes formes"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Error"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Informa de l'error"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Error d'aplicació."
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Error: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Per informar d'errors heu de tenir un compte a <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Seguiment d'errors"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Usuari:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Contrasenya:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +191,11 @@ msgstr ""
"Per mantenir-vos informat afegirem el vostre usuari a la llista "
"d'interessats en aquest assumpte."
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "S'ha creat una nou informe d'error amb l'identificador "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -202,11 +203,11 @@ msgstr ""
"Error de connexió.\n"
"Nom d'usuari o contrasenya incorrectes."
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Excepció:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -216,12 +217,12 @@ msgstr ""
"L'aplicació no es podrà connectar a aquest servidor fins que es "
"corregeixi l'empremta digital del servidor."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Risc de seguretat."
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -229,39 +230,39 @@ msgstr ""
"Error de connexió.\n"
"No ha estat possible connectar-se al servidor."
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Error de xarxa."
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "A"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "s"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Cerca...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Crea...</i>"
@@ -269,253 +270,257 @@ msgstr "<i>Crea...</i>"
msgid "Open the calendar <F2>"
msgstr "Obre el calendari <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Selecció de data"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "a"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "sí"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "verdader"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "v"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Verdader"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Fals"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Edita..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Adjunts..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Accions..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Relacionat..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Informe..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "Correu electrònic..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Imprimeix..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Fitxer"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "U_suari"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Opcions"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "_Preferits"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Aj_uda"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Cerca"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "No s'han trobat resultats."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Connecta..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Desconnecta"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "_Base de dades"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nova base de dades..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Restaura una base de dades..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Fes _còpia de seguretat de la base de dades..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "_Elimina una base de dades..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Surt..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Preferències..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Recarrega el menú"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Commuta el _menú"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "Cerca _Global"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Barra d'_eines"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "Per _defecte"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Text _i icones"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Icones"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Text"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "Barra de _menú"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Canvia tecles ràpides"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Mode"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Formulari"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Desa ample/alt"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr "Desa l'estat de l'arbre"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Correcció ortogràfica"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Posició de les pestanyes"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Superior"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Esquerra"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Dreta"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Inferior"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "_Anterior"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "_Següent"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "_Límit de cerca..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Correu electrònic..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Desa opcions"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "Conse_lls..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Com_binacions de tecles..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Quant a..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Gestiona els preferits"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -523,11 +528,11 @@ msgstr ""
"L'acció seleccionada requereix tancar totes les pestanyes.\n"
"Voleu continuar?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Tanca pestanya"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -535,7 +540,7 @@ msgstr ""
"Esteu a punt d'eliminar una base de dades de Tryton.\n"
"Esteu segur que voleu continuar?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -543,28 +548,28 @@ msgstr ""
"La contrasenya del servidor Tryton és incorrecta.\n"
"Intenteu-ho de nou."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Accés denegat."
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "L'eliminació de la base de dades ha fallat amb el missatge d'error:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Ha fallat l'eliminació de la base de dades."
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "La base de dades s'ha eliminat correctament."
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Obre una còpia de seguretat per restaurar..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -572,11 +577,11 @@ msgstr ""
"No és possible restaurar una base de dades protegida amb contrasenya.\n"
"La còpia de seguretat i la seva restauració ha de ser manual."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "La base de dades està protegida amb contrasenya."
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -584,19 +589,19 @@ msgstr ""
"La contrasenya del servidor Tryton és incorrecta.\n"
"Intenteu-ho de nou."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "La restauració de la base de dades ha fallat amb l'error:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "La restauració de la base de dades ha fallat."
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "La base de dades s'ha restaurat correctament."
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -604,75 +609,75 @@ msgstr ""
"No és possible fer còpia d'una base de dades protegida amb contrasenya.\n"
"La còpia de seguretat i la seva restauració ha de ser manual."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "L'extracció de la base de dades ha fallat amb el missatge d'error:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "L'extracció de la base de dades ha fallat."
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "La còpia de seguretat de la base de dades ha finalitzat correctament."
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Nou"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Crea un nou registre"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Desa"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Desa aquest registre"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Canvia la vista"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Canvia la vista"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Recarrega"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Recarrega"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nou"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Desa"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Canvia la vi_sta"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "_Recarrega/Desfés"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Elimina..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "_Tanca la pestanya"
@@ -707,28 +712,28 @@ msgstr ""
"bloquejats.\n"
"Premeu a «Canvia» per canviar l'adreça."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Crea nova base de dades"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "C_rea"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Crea la nova base de dades."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Configuració del servidor:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Connexió amb el servidor:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -738,22 +743,22 @@ msgstr ""
"«8000» si el servidor està instal·lat en aquest ordinador. Premeu a "
"«Canvia» per canviar l'adreça."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "C_anvia"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Configura la connexió amb el servidor..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Contrasenya del servidor Tryton:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -761,15 +766,15 @@ msgstr ""
"Aquesta és la contrasenya del servidor Tryton. No correspon a un usuari "
"real. Aquesta contrasenya es defineix en la configuració de trytond."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Nova configuració de la base de dades:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Nom de la base de dades:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -780,25 +785,25 @@ msgstr ""
"Podeu utilitzar caràcters alfanumèrics o _ (guió baix)\n"
"Eviteu qualsevol accent, espai o caràcters especials. Exemple: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Idioma per defecte:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
"administration menu."
msgstr ""
-"Esculliu l'idioma per defecte que s'instal·larà per a aquesta base de "
+"Escolliu l'idioma per defecte que s'instal·larà per a aquesta base de "
"dades. Podreu instal·lar nous idiomes després de la instal·lació, "
"mitjançant el menú d'administració."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Contrasenya de l'administrador:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -810,15 +815,15 @@ msgstr ""
"Nom d'usuari: admin\n"
"Contrasenya: <La contrasenya que introduïu aquí>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Confirmeu la contrasenya de l'administrador:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Teclegeu la contrasenya de l'administrador de nou"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -827,31 +832,31 @@ msgstr ""
"\"_\" (guió baix). Eviteu tots els accents, espais i qualsevol altre "
"caràcter especial."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Heu introduït caràcters incorrectes al nom de la base de dades."
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
"La nova contrasenya de l'administrador no coincideix amb el camp de "
"confirmació.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Les contrasenyes no coincideixen."
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"La contrasenya de l'administrador i la seva confirmació són necessàries "
"per crear una nova base de dades."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Falta la contrasenya de l'administrador."
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -859,15 +864,15 @@ msgstr ""
"Ja existeix una base de dades amb el mateix nom.\n"
"Intenteu-ho amb un altre nom de base de dades."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Ja existeix una base de dades amb aquest nom."
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "La contrasenya del servidor Tryton no és correcta. Intenteu-ho de nou."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -880,7 +885,7 @@ msgstr ""
" informació addicional.\n"
"Missatge d'error:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "S'ha produït un error al crear la base de dades."
@@ -928,7 +933,7 @@ msgstr "Elimina la base de dades seleccionada."
msgid "Choose a Tryton database to delete:"
msgstr "Trieu la base de dades Tryton a eliminar:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Connexió al servidor:"
@@ -1019,15 +1024,15 @@ msgstr "Servidor:"
msgid "User name:"
msgstr "Nom d'usuari:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Restaura una base de dades"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Fitxer a restaurar:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1039,15 +1044,15 @@ msgstr ""
"Eviteu tots els accents, espais, o caràcters especials. \n"
"Exemple: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Nom de la base de dades nova:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Actualitza base de dades:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1056,11 +1061,11 @@ msgstr ""
"dades des d'una versió anterior de Tryton, després de restaurar la base "
"de dades."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Restaura"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Restaura la base de dades des d'un fitxer."
@@ -1100,154 +1105,158 @@ msgstr "Missatge:"
msgid "Attachment:"
msgstr "Adjunt:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Anterior"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Registre anterior"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Següent"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Registre següent"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Adjunt(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Afegeix un adjunt al registre"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Duplica"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Anterior"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Seg_üent"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Cerca"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Veure _registre..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Mostra revisions..."
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "Adjun_ts..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Accions..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Relacionat..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Informes..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Correu electrònic..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "Im_primeix..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Exporta dades..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Importa dades..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Adjunt(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Heu de triar un registre."
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Creat per:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Data de creació:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Última modificació per:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Última data de modificació:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Model:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Esteu segur que voleu eliminar aquest registre?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Esteu segur que voleu eliminar aquests registres?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Els registres no s'han eliminat."
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Registres eliminats."
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Ara esteu treballant en el registre duplicat."
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Registre desat."
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Formulari incorrecte."
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " de "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1255,46 +1264,52 @@ msgstr ""
"Aquest registre ha estat modificat.\n"
"Voleu desar-lo?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Acció"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Executa acció"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "_Relacionat"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Obre registres relacionats"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Informes"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Obre informe"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
-msgstr "Email"
+msgstr "Correu electrònic"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Informe per email"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Imprimeix"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Imprimeix informe"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconegut"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Límit"
@@ -1323,6 +1338,18 @@ msgstr "Preferències"
msgid "Current Password:"
msgstr "Contrasenya actual:"
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Revisió"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Seleccioneu una revisió"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Revisió:"
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Combinacions de tecles"
@@ -1501,21 +1528,21 @@ msgstr "Afegeix noms de _camp"
msgid "Name"
msgstr "Nom"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Quin és el nom d'aquesta exportació?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "S'ha desat %d registre."
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "S'han desat %d registres."
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1530,26 +1557,26 @@ msgstr ""
msgid "Link"
msgstr "Enllaç"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Afegeix"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Elimina <Supr>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Crea un nou registre <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Elimina el registre seleccionat <Supr>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Recupera el registre seleccionat <Ins>"
@@ -1572,10 +1599,10 @@ msgstr "Fitxer a importar:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Obre..."
@@ -1599,19 +1626,19 @@ msgstr "Codificació:"
msgid "Lines to Skip:"
msgstr "Línies a ometre:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Nom del camp"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Primer heu de triar un fitxer a importar."
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Error a l'obrir el fitxer CSV"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "S'ha produït un error en processar el fitxer en el camp %s."
@@ -1626,24 +1653,7 @@ msgstr "S'ha importat %d registre."
msgid "%d records imported!"
msgstr "S'han importat %d registres."
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Error d'importació."
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error important registre %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Assistent"
@@ -1652,39 +1662,35 @@ msgstr "Assistent"
msgid "No String Attr."
msgstr "No té una cadena com atribut."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Creat per"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Data de creació"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Modificat per"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Data de modificació"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr "No s'ha pogut obtenir l'estat de la vista d'arbre"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "No s'ha pogut desar l'estat de la vista d'arbre"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Heu de seleccionar un registre per usar la relació."
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1692,19 +1698,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_iltres"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Mostra les cerques preferides"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Elimina de les cerques preferides"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Desa com a cerca preferida"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Nom de la cerca preferida:"
@@ -1732,24 +1738,24 @@ msgstr "Setmana"
msgid "Select a File..."
msgstr "Selecciona un fitxer..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Mostra com a text pla"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Afegeix un valor"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Eliminar \"%s\""
@@ -1766,23 +1772,23 @@ msgstr "Tots els fitxers"
msgid "Images"
msgstr "Imatges"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Traducció"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Edita"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Dubtós"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Heu de desar el registre abans d'afegir traduccions."
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "No hi ha cap altre idioma disponible."
@@ -1795,12 +1801,12 @@ msgstr "Afegeix un registre existent"
msgid "Remove selected record <Del>"
msgstr "Elimina el registre seleccionat <Supr>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Obre el registre <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Cerca un registre <F2>"
@@ -1846,7 +1852,7 @@ msgstr "Alinea la línia a la dreta"
#: tryton/gui/window/view_form/view/form_gtk/richtextbox.py:167
msgid "Justify of line to fill window"
-msgstr "Justifica la línia per omplenar la finestra"
+msgstr "Justifica la línia per emplenar la finestra"
#: tryton/gui/window/view_form/view/form_gtk/richtextbox.py:169
msgid "Change the foreground text"
@@ -1892,15 +1898,10 @@ msgstr "Imatge PNG (*.png)"
msgid "Image size too large!"
msgstr "La mida de la imatge és massa gran."
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconegut"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Tradueix la vista"
diff --git a/share/locale/cs_CZ/LC_MESSAGES/tryton.mo b/share/locale/cs_CZ/LC_MESSAGES/tryton.mo
index d2d9305..abe3177 100644
Binary files a/share/locale/cs_CZ/LC_MESSAGES/tryton.mo and b/share/locale/cs_CZ/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/cs_CZ/LC_MESSAGES/tryton.po b/share/locale/cs_CZ/LC_MESSAGES/tryton.po
index ce7d7f1..9338785 100644
--- a/share/locale/cs_CZ/LC_MESSAGES/tryton.po
+++ b/share/locale/cs_CZ/LC_MESSAGES/tryton.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2012-04-23 11:06+0200\n"
"Last-Translator: Dan Horák <dan at danny.cz>\n"
"Language-Team: Czech\n"
@@ -61,62 +61,62 @@ msgstr "Nelze zapsat konfigurační soubor %s!"
msgid "Unable to set locale %s"
msgstr "Nemohu nastavit lokalizaci %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Vyberte akci"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Žádná akce není definována!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton spojení"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Server:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Port:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Výběr"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Váš výběr:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Uložit jako..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "zadejte alternativní konfigurační soubor"
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr ""
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Potvrzení"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Výjimka při souběhu"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
#, fuzzy
msgid ""
"<b>Write Concurrency Warning:</b>\n"
@@ -135,50 +135,50 @@ msgstr ""
" - \"Porovnat\" pro zobrazení změněné verze,\n"
" - \"Přesto zapsat\" pro zapsání vaší verze."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Porovnat"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Přesto zapsat"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Chyba"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Nahlásit chybu"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Chyba aplikace!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Chyba:"
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, fuzzy, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Pro hlášení chyb musíte mít účet na <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Sledování chyb"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Uživatel:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Heslo:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -186,11 +186,11 @@ msgstr ""
"Ta samá chyba již byla nahlášena jiným uživatelem.\n"
"Vaše uživatelské jméno bylo přidáno na její seznam."
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Založena nová chyba s ID"
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -198,23 +198,23 @@ msgstr ""
"Chyba při spojení!\n"
"Špatné uživatelské jméno nebo heslo!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Výjimka:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
" is fixed."
msgstr ""
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr ""
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -222,39 +222,39 @@ msgstr ""
"Chyba spojení!\n"
"Nelze se připojit k serveru!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Chyba sítě!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr ""
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr ""
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr ""
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr ""
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr ""
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr ""
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr ""
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr ""
@@ -263,274 +263,279 @@ msgstr ""
msgid "Open the calendar <F2>"
msgstr "Otevřít kalendář"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Výběr datumu"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
#, fuzzy
msgid "yes"
msgstr "bajtů"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
#, fuzzy
msgid "true"
msgstr "Pravda"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Pravda"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Nepravda"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Konec..."
+
+#: tryton/common/popup_menu.py:77
#, fuzzy
msgid "Attachments..."
msgstr "Příloha:"
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
#, fuzzy
msgid "Actions..."
msgstr "Akce..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
#, fuzzy
msgid "Relate..."
msgstr "_Odstranit..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
#, fuzzy
msgid "Report..."
msgstr "Importovat data..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
#, fuzzy
msgid "E-Mail..."
msgstr "_Email..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
#, fuzzy
msgid "Print..."
msgstr "_Tisk..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Soubor"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Uživatel"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Volby"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr ""
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Nápo_věda"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Hledat"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr ""
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Připojit..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Odpojit"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "Databáze"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "Nová databáze..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "Obnovit databázi..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Zazálohovat databázi..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Smazat databázi"
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "Konec..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Vlastnosti..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
#, fuzzy
msgid "_Menu Reload"
msgstr "_Obnovit"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr ""
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr ""
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
#, fuzzy
msgid "_Toolbar"
msgstr "Nástrojová lišta"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "_Výchozí"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "_Text a ikony"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Ikony"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Text"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "Hlavní nabídka"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr ""
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Režim"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normální"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "Formulář"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr ""
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr ""
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Kontrola pravopisu"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Pozice záložek"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Nahoře"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Vlevo"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Vpravo"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Dole"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
#, fuzzy
msgid "_Previous Tab"
msgstr "_Předchozí"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr ""
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr ""
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Email..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "Uložit nastavení"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "_Tipy..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "_Klávesové zkratky..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_O programu..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr ""
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
msgstr ""
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Zavřít záložku"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -538,7 +543,7 @@ msgstr ""
"Bude smazána Tryton databáze.\n"
"Opravdu chcete pokračovat?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -546,28 +551,28 @@ msgstr ""
"Špatné heslo Tryton serveru\n"
"Zkuste to znovu."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Přístup odepřen!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "Odstranění databáze selhalo s chybovou zprávou:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Odstranění databáze selhalo!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "Databáze úspěšné odstraněna!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Otevřít soubor se zálohou pro obnovu..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -575,11 +580,11 @@ msgstr ""
"Není možné obnovit databázi chráněnou heslem.\n"
"Záloha a obnova musí být provedeny ručně."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "Databáze je chráněna heslem!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -587,19 +592,19 @@ msgstr ""
"Špatné heslo Tryton serveru\n"
"Zkuste to znovu."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "Obnovení databáze selhalo s chybovou zprávou:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Obnova databáze selhala!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "Databáze úspěšně obnovena!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -607,76 +612,76 @@ msgstr ""
"Není možné zálohovat databázi chráněnou heslem.\n"
"Záloha a obnova musí být provedeny ručně."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Záloha databáze selhala s chybovou zprávou:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Záloha databáze selhala!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "Databáze úspěšně zazálohována!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr ""
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Vytvořit nový záznam"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
#, fuzzy
msgid "Save"
msgstr "_Uložit"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Uložit tento záznam"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Přepnout"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Přepnout pohled"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Obnovit"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Obnovit"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nový"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Uložit"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Přepnout pohled"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "Obnovit/Zpět"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Odstranit..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "_Zavřít kartu"
@@ -712,28 +717,28 @@ msgstr ""
"port (obvykle 8070) serveru nejsou blokovány.\n"
"Klikněte na \"Změnit\" pro změnu adresy."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Vytvořit novou databázi"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "_Vytvořit"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Vytvořit novou databázi."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Nastavení serveru:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Spojení k serveru:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
#, fuzzy
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
@@ -744,22 +749,22 @@ msgstr ""
"pokud je server nainstalován na tomto počítači. Klikněte na \"Změnit\" "
"pro změnu adresy."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "Změnit"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Nastavení spojení k serveru..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Heslo pro Tryton server:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -767,15 +772,15 @@ msgstr ""
"Toto je heslo pro Tryton server. Nepatří žádnému skutečnému uživateli. "
"Toto heslo je obvykle definováno v konfiguračním souboru serveru."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Nastavení nové databáze:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Název databáze:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -787,11 +792,11 @@ msgstr ""
"Nepoužívejte znaky s akcenty, mezeru nebo speciální znaky!\n"
"Příklad: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Výchozí jazyk:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -801,11 +806,11 @@ msgstr ""
"instalaci budete schopni instalovat další jazyky pomocí administračního "
"menu."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Heslo správce:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -817,15 +822,15 @@ msgstr ""
"Uživatel: admin\n"
"Heslo: <právě zadané heslo>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Potvrzení hesla správce:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Zadejte znovu heslo správce"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
#, fuzzy
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
@@ -835,27 +840,27 @@ msgstr ""
"začínat písmenem a být maximálně 63 znaků dlouhý.\n"
"Nepoužívejte znaky s akcenty, mezeru nebo jiné speciální znaky."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Neplatný znak v názvu databáze!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "Heslo správce a jeho zopakování nejsou shodné.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Hesla nesouhlasí!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr "Heslo správce a jeho zopakování jsou nutné pro vytvoření nové databáze."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Chybí heslo administrátora!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -863,15 +868,15 @@ msgstr ""
"Databáze se stejným názvem již existuje.\n"
"Použijte jiný název."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Databáze s tímto názvem již existuje!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Zadali jste špatné heslo pro Tryton server. Zkuste to znovu."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -883,7 +888,7 @@ msgstr ""
" Zkontrolujte chybové hlášení pro případné další informace.\n"
"Chybová zpráva:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Chyba při vytváření databáze!"
@@ -931,7 +936,7 @@ msgstr "Smazat vybranou databázi."
msgid "Choose a Tryton database to delete:"
msgstr "Vyberte Tryton databázi pro smazání:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Přepojení k serveru:"
@@ -1029,15 +1034,15 @@ msgstr "Port:"
msgid "User name:"
msgstr "Uživatelské jméno:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Obnovit databázi"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Obnovit ze souboru:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1049,26 +1054,26 @@ msgstr ""
"Nepoužívejte znaky s akcenty, mezeru nebo speciální znaky!\n"
"Příklad: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Název nové databáze:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
#, fuzzy
msgid "Update Database:"
msgstr "Zálohovat databázi"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
msgstr ""
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Obnovit"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Obnovit databázi ze souboru."
@@ -1108,159 +1113,163 @@ msgstr "Tělo:"
msgid "Attachment:"
msgstr "Příloha:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Předchozí"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Předchozí záznam"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Další"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Následující záznam"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Přílohy(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Přidat přílohu k záznamu"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Duplikovat"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Předchozí"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "_Následující"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
#, fuzzy
msgid "_Search"
msgstr "Hledat"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Zobrazit záznamy..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
#, fuzzy
msgid "A_ttachments..."
msgstr "Příloha:"
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "Akce..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
#, fuzzy
msgid "_Relate..."
msgstr "_Odstranit..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
#, fuzzy
msgid "_Report..."
msgstr "Importovat data..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
#, fuzzy
msgid "_E-Mail..."
msgstr "_Email..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "_Tisk..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "Exportovat data"
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "Importovat data..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Příloha(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Musíte vybrat právě jeden záznam!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Vytvořeno uživatelem:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Datum vytvoření:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Poslední úpravu provedl:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Datum poslední úpravy:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Model:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Opravdu chcete odstranit tento záznam?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Opravdu chcete odstranit tyto záznamy?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Záznamy neodstraněny!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Záznamy odstraněny!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Nyní pracujete s duplicitním záznamem!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Záznam uložen!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Neplatný formulář!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " z "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1268,51 +1277,57 @@ msgstr ""
"Tento záznam byl upraven\n"
"chcete ho uložit?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Akce"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr ""
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
#, fuzzy
msgid "Relate"
msgstr "_Vytvořit"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
#, fuzzy
msgid "Open related records"
msgstr "Otevřít záznam"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
#, fuzzy
msgid "Report"
msgstr "Sestavy"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
#, fuzzy
msgid "Open report"
msgstr "Otevřít záznam"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
#, fuzzy
msgid "E-Mail"
msgstr "Email"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr ""
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Tisk"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr ""
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Neznámý"
+
#: tryton/gui/window/limit.py:17
#, fuzzy
msgid "Limit"
@@ -1344,6 +1359,20 @@ msgstr "Nastavení"
msgid "Current Password:"
msgstr "Heslo správce:"
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Předchozí"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Výběr"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Klávesové zkratky"
@@ -1519,21 +1548,21 @@ msgstr "Přidat jména polí"
msgid "Name"
msgstr ""
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr ""
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d záznam uložen!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d záznamů uloženo!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1548,28 +1577,28 @@ msgstr ""
msgid "Link"
msgstr "Odkaz"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Přidat"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr ""
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
#, fuzzy
msgid "Create a new record <F3>"
msgstr "Vytvořit nový záznam"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
#, fuzzy
msgid "Delete selected record <Del>"
msgstr "Smazat vybraný záznam"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
#, fuzzy
msgid "Undelete selected record <Ins>"
@@ -1593,10 +1622,10 @@ msgstr "Soubor k importu:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Otevřít..."
@@ -1621,19 +1650,19 @@ msgstr "Kódování:"
msgid "Lines to Skip:"
msgstr "Vynechané řádky:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Jméno pole"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Nejprve je nutné vybrat soubor pro import!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Chyba při otevírání CSV souboru"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, fuzzy, python-format
msgid "Error processing the file at field %s."
msgstr "Chyba při zpracování souboru u pole %s.\n"
@@ -1648,20 +1677,7 @@ msgstr "%d záznam načten!"
msgid "%d records imported!"
msgstr "%d záznamů načteno!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Chyba načítání!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Průvodce"
@@ -1670,45 +1686,41 @@ msgstr "Průvodce"
msgid "No String Attr."
msgstr "Žádný řetězcový atribut"
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
#, fuzzy
msgid "ID"
msgstr "Najít"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
#, fuzzy
msgid "Creation User"
msgstr "Vytvořeno uživatelem:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
#, fuzzy
msgid "Creation Date"
msgstr "Datum vytvoření:"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
#, fuzzy
msgid "Modification User"
msgstr "Datum poslední úpravy:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
#, fuzzy
msgid "Modification Date"
msgstr "Datum poslední úpravy:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
msgid "Unable to set view tree state"
msgstr "Nemohu nastavit lokalizaci %s"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Musíte vybrat záznam před použitím relace!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ""
@@ -1717,19 +1729,19 @@ msgstr ""
msgid "F_ilters"
msgstr "_Soubor"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr ""
@@ -1761,24 +1773,24 @@ msgstr ""
msgid "Select a File..."
msgstr "Vyberte soubor"
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr ""
@@ -1796,24 +1808,24 @@ msgstr "Všechny soubory"
msgid "Images"
msgstr "Obrázky"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
#, fuzzy
msgid "Translation"
msgstr "Přidat překlad"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Musíte uložit záznam před přidáváním překladů!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Jiný jazyk není k dispozici!"
@@ -1828,13 +1840,13 @@ msgstr "Uložit tento záznam"
msgid "Remove selected record <Del>"
msgstr "Smazat vybraný záznam"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
#, fuzzy
msgid "Open a record <F2>"
msgstr "Otevřít záznam"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
#, fuzzy
msgid "Search a record <F2>"
msgstr "Hledat záznam"
@@ -1929,16 +1941,11 @@ msgstr "Obrázek PNG (*.png)"
msgid "Image size too large!"
msgstr "Rozměry obrázku jsou příliš velké!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
#, fuzzy
msgid ": "
msgstr ":"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Neznámý"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Přeložit pohled"
diff --git a/share/locale/de_DE/LC_MESSAGES/tryton.mo b/share/locale/de_DE/LC_MESSAGES/tryton.mo
index 3a76ddb..53bb90b 100644
Binary files a/share/locale/de_DE/LC_MESSAGES/tryton.mo and b/share/locale/de_DE/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/de_DE/LC_MESSAGES/tryton.po b/share/locale/de_DE/LC_MESSAGES/tryton.po
index e49ff0a..5cdcaa4 100644
--- a/share/locale/de_DE/LC_MESSAGES/tryton.po
+++ b/share/locale/de_DE/LC_MESSAGES/tryton.po
@@ -1,16 +1,17 @@
# German (Germany) translations for tryton.
-# Copyright (C) 2008 B2CK
+# Copyright (C) 2008-2014 MBSolutions
# This file is distributed under the same license as the tryton project.
# Udo Spallek <udono at gmx.net>, 2008.
+# Mathias Behrle <mbehrle at m9s.biz>, 2008-2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: tryton 0.0.1\n"
+"Project-Id-Version: tryton 3.2.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-16 12:46+0100\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-14 12:23+0100\n"
"Last-Translator: Mathias Behrle <mbehrle at m9s.biz>\n"
-"Language-Team: de_DE <LL at li.org>\n"
+"Language-Team: de_DE <tryton-de at googlegroups.com>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -64,62 +65,62 @@ msgstr "Kann Konfigurationsdatei '%s' nicht schreiben!"
msgid "Unable to set locale %s"
msgstr "Kann locale %s nicht setzen"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Aktion wählen"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Keine Aktion angegeben!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Verbindung"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Server:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Port:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Auswahl"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Ihre Auswahl:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Speichern unter..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Diese Warnung künftig nicht mehr anzeigen"
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "Fortfahren?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Bestätigung"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Aktualisierungskonflikt"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -140,52 +141,52 @@ msgstr ""
" - \"Überschreiben\" um die gespeicherte Version mit Ihrer Version zu "
"überschreiben"
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Vergleichen"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Überschreiben"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Fehler"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Fehler berichten"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Anwendungsfehler!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Fehler:"
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr ""
"Um Fehler online berichten zu können, benötigen Sie ein Konto auf "
"<u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Fehler melden"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Anmeldename:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Passwort:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -195,11 +196,11 @@ msgstr ""
"Zu Ihrer Information wurde Ihr Benutzername auf der Interessentenliste "
"eingetragen."
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Neuer Fehlerbericht angelegt mit ID "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -207,11 +208,11 @@ msgstr ""
"Verbindungsfehler!\n"
"Anmeldename oder Passwort fehlerhaft."
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Ausnahme: "
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -222,12 +223,12 @@ msgstr ""
"Der Client wird sich nicht mehr zu diesem Server verbinden bis der "
"Fingerabdruck wieder dem des Servers entspricht."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Sicherheitsrisiko!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -235,39 +236,39 @@ msgstr ""
"Verbindungsfehler!\n"
"Kann nicht zum Server verbinden."
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Netzwerkfehler!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "J"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "W"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "t"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Suche...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Erstelle...</i>"
@@ -275,253 +276,257 @@ msgstr "<i>Erstelle...</i>"
msgid "Open the calendar <F2>"
msgstr "Kalender öffnen <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Auswahl Datum"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "J"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "Ja"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "Wahr"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "w"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Wahr"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Falsch"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Bearbeiten..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Anhänge..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Aktionen..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Beziehungen..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Berichte..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "E-Mail..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Drucken..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Datei"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Benutzer"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Einstellungen"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "Fa_voriten"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "_Hilfe"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Suchen"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "Kein Ergebnis."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Verbinden..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "Verbindung _trennen"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "_Datenbank"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Neue Datenbank..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "Datenbank _wiederherstellen..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
-msgstr "Datenbank _sichern..."
+msgstr "Datenbankbackup er_stellen..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Datenbank _löschen..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Beenden..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Einstellungen..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Menü neu laden"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Menü _umschalten"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "_Globale Suche"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "_Werkzeugleiste"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "_Standard"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Text _und Symbole"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Symbole"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Text"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "_Menüleiste"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Schnelltasten ändern"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Modus"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Formular"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Breite/Höhe speichern"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr "Menüansicht speichern"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Rechtschreibkorrektur"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Position der Tabs"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Oben"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Links"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Rechts"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Unten"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "_Vorheriger Tab"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "_Nächster Tab"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Suchlimitierung..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_E-Mail..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "Einstellungen _speichern"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "_Tipps..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "_Schnelltasten..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Über..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "Favoriten verwalten"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -529,11 +534,11 @@ msgstr ""
"Die folgende Aktion erfordert die Schließung aller Tabs.\n"
"Fortfahren?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Tab schließen"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -541,7 +546,7 @@ msgstr ""
"Sie werden eine Tryton Datenbank löschen.\n"
"Wirklich fortfahren?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -549,30 +554,30 @@ msgstr ""
"Falsches Passwort für den Tryton Server\n"
"Bitte geben Sie es noch einmal ein."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Zugang verweigert!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr ""
"Das Löschen der Datenbank ist fehlgeschlagen mit der folgenden "
"Fehlermeldung:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Datenbank konnte nicht gelöscht werden!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
-msgstr "Datenbank erfolgreich gelöscht!"
+msgstr "Datenbank erfolgreich gelöscht."
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Backup Datei für Wiederherstellung öffnen..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -582,11 +587,11 @@ msgstr ""
"Backup und Wiederherstellung müssen in diesem Fall manuell durchgeführt "
"werden."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "Datenbank ist passwortgeschützt!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -594,21 +599,21 @@ msgstr ""
"Falsches Passwort für den Tryton Server\n"
"Bitte geben Sie es noch einmal ein."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr ""
"Wiederherstellung der Datenbank ist fehlgeschlagen mit der Fehlermeldung:"
"\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Wiederherstellung der Datenbank ist fehlgeschlagen!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
-msgstr "Datenbank wurde erfolgreich wiederhergestellt!"
+msgstr "Datenbank wurde erfolgreich wiederhergestellt."
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -617,75 +622,75 @@ msgstr ""
"Backup und Wiederherstellung müssen in diesem Fall manuell durchgeführt "
"werden."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Die Datenbanksicherung ist fehlgeschlagen mit der Fehlermeldung:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Datenbank konnte nicht gesichert werden!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
-msgstr "Datenbank erfolgreich gesichert!"
+msgstr "Datenbank erfolgreich gesichert."
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Neu"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Neuen Datensatz erstellen"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Speichern"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Diesen Datensatz speichern"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Ansicht wechseln"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Ansicht wechseln"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Neu laden"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Neu laden"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Neu"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Speichern"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "_Ansicht wechseln"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "Neu laden/_Rückgängig"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Löschen..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "Tab schließen"
@@ -723,28 +728,28 @@ msgstr ""
"werden.\n"
"Wählen Sie 'Bearbeiten', um die Adresse des Tryton-Servers anzupassen."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Neue Datenbank erstellen"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "_Erstellen"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Neue Datenbank erstellen"
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Tryton Server Einstellungen:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Serververbindung:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -755,22 +760,22 @@ msgstr ""
"Computer installiert ist. Klicken Sie auf 'Bearbeiten' um diese Adresse "
"zu ändern."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "_Bearbeiten"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Serververbindung konfigurieren..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Tryton Server Passwort:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -779,15 +784,15 @@ msgstr ""
"Dieses Passwort ist nicht das Passwort eines Tryton Benutzers, sondern "
"wird üblicherweise in der Konfiguration des Tryton Servers angegeben."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Datenbank Einstellungen:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Name:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -800,11 +805,11 @@ msgstr ""
"'ß'!\n"
"Beispielname: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Standard Sprache:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -814,11 +819,11 @@ msgstr ""
"Installation ist es im Administrationsmenü möglich eine neue Sprache "
"einzustellen."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Administrator Passwort:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -831,17 +836,17 @@ msgstr ""
"Anmeldename: admin\n"
"Passwort: <Das hier vergebene Passwort>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Passwort Wiederholung:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr ""
"Wiederholen Sie die Eingabe des Administrator Passworts um sicher zu "
"gehen, dass Sie sich beim ersten Mal nicht vertippt haben."
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -851,31 +856,31 @@ msgstr ""
"Spezialzeichen sollten nicht benutzt werden. Umlaute, Akzente und 'ß' "
"sind ebenfalls verboten."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Unerlaubte Zeichen im Namen für die Datenbank!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
"Die beiden Eingaben für das neue Administrator Passwort stimmen nicht "
"überein.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Passwörter sind nicht identisch!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"Das Administrator Passwort und dessen Wiederholung werden benötigt um "
"eine neue Datenbank für Tryton anlegen zu können."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Administrator Passwort fehlt!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -883,17 +888,17 @@ msgstr ""
"Eine Datenbank mit diesem Namen existiert bereits.\n"
"Versuchen Sie einen anderen Datenbanknamen."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Eine Datenbank mit diesem Namen existiert bereits!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr ""
"Das für den Tryton Server eingegebene Passwort scheint falsch zu sein. "
"Bitte nochmals eingeben."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -903,12 +908,12 @@ msgstr ""
"Kann wegen eines unbekannten Problems nicht mit dem Tryton-Server "
"verbinden.\n"
"Wenn eine Datenbank erstellt wurde, könnte diese unvollständig oder "
-"defekt sein. Es wird empfohlen die soeben erstellte Datenbank zu löschen!"
+"defekt sein. Es wird empfohlen die soeben erstellte Datenbank zu löschen."
" Bitte beachten Sie die folgende Fehlermeldung für weitere Informationen "
"zu diesem Fehler.\n"
"Fehlermeldung:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Fehler bei der Datenbankerstellung!"
@@ -956,7 +961,7 @@ msgstr "Die ausgewählte Datenbank löschen"
msgid "Choose a Tryton database to delete:"
msgstr "Wählen Sie die Tryton Datenbank aus, die gelöscht werden soll:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Serververbindung:"
@@ -1005,7 +1010,7 @@ msgstr "Kann nicht zum Server verbinden!"
#: tryton/gui/window/dblogin.py:310 tryton/gui/window/dblogin.py:631
msgid "Incompatible version of the server"
-msgstr "Inkompatible Serverversion!"
+msgstr "Inkompatible Serverversion"
#: tryton/gui/window/dblogin.py:370
msgid "Login"
@@ -1047,15 +1052,15 @@ msgstr "Host:"
msgid "User name:"
msgstr "Anmeldename:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Datenbank wiederherstellen"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Datei zur Wiederherstellung:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1067,15 +1072,15 @@ msgstr ""
"Nicht erlaubt sind Akzente, Leerzeichen oder spezielle Zeichen! \n"
"Beispiel: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Name für neue Datenbank:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Datenbank aktualisieren:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1084,11 +1089,11 @@ msgstr ""
"einer früheren Version von Tryton erstellt wurde, eine automatische "
"Aktualisierung der Datenbank durchgeführt."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Wiederherstellen"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Datenbank aus Datei wiederherstellen"
@@ -1128,154 +1133,158 @@ msgstr "Textkörper:"
msgid "Attachment:"
msgstr "Anhang:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Vorheriger"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Vorheriger Datensatz"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Nächster"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Nächster Datensatz"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Anhang(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Einen Anhang zum Datensatz hinzufügen"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Duplizieren"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Vorheriger"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "_Nächster"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Suche"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "_Protokoll ansehen..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Bearbeitungen anzeigen..."
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
-msgstr "A_nhange..."
+msgstr "A_nhänge..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Aktion ausführen..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Beziehung öffnen..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Bericht öffnen..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Bericht per E-Mail..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "_Bericht drucken..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "Daten _exportieren..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "Daten _importieren..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Anhänge(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Sie müssen mindestens einen Datensatz auswählen!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Erstellt von"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Erstellt am"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Zuletzt verändert von"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Zuletzt verändert am"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Modell:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Möchten Sie diesen Datensatz wirklich löschen?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Möchten Sie diese Datensätze wirklich löschen?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Datensätze nicht gelöscht!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
-msgstr "Datensätze gelöscht!"
+msgstr "Datensätze gelöscht"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
-msgstr "Sie arbeiten nun an dem duplizierten Datensatz!"
+msgstr "Sie arbeiten nun an dem duplizierten Datensatz"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
-msgstr "Datensatz gespeichert!"
+msgstr "Datensatz gespeichert"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Ungültiges Formular!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " von "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1283,46 +1292,52 @@ msgstr ""
"Datensatz geändert\n"
"Soll der Datensatz gespeichert werden?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Aktion"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Aktion ausführen"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "Beziehung"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Datensätze einer Beziehung öffnen"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Bericht"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Bericht öffnen"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "E-Mail"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Bericht per E-Mail senden"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Drucken"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Bericht drucken"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Unbekannt"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Limitierung"
@@ -1351,6 +1366,18 @@ msgstr "Einstellung"
msgid "Current Password:"
msgstr "Aktuelles Passwort:"
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Bearbeitung"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Bearbeitung auswählen"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Bearbeitung:"
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Schnelltasten"
@@ -1530,21 +1557,21 @@ msgstr "Feldnamen _hinzufügen"
msgid "Name"
msgstr "Name"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Wie soll der Name des Exports lauten?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
-msgstr "%d Datensatz gespeichert!"
+msgstr "%d Datensatz gespeichert"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
-msgstr "%d Datensätze gespeichert!"
+msgstr "%d Datensätze gespeichert"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1559,26 +1586,26 @@ msgstr ""
msgid "Link"
msgstr "Verknüpfung"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Hinzufügen"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Entfernen <Entf>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Neuen Datensatz erstellen <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Ausgewählte Datensätze löschen <Entf>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Löschung der ausgewählten Datensätze rückgängig machen <Einfg>"
@@ -1601,10 +1628,10 @@ msgstr "Importdatei:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Öffnen..."
@@ -1628,19 +1655,19 @@ msgstr "Kodierung:"
msgid "Lines to Skip:"
msgstr "Zu überspringende Zeilen:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Feldname"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Zuerst muss eine Importdatei ausgewählt werden!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Fehler beim öffnen der CSV-Datei"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Fehler bei der Verarbeitung der Datei in Feld %s."
@@ -1648,31 +1675,14 @@ msgstr "Fehler bei der Verarbeitung der Datei in Feld %s."
#: tryton/gui/window/win_import.py:364
#, python-format
msgid "%d record imported!"
-msgstr "%d Datensatz importiert!"
+msgstr "%d Datensatz importiert"
#: tryton/gui/window/win_import.py:366
#, python-format
msgid "%d records imported!"
-msgstr "%d Datensätze importiert!"
-
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Fehler beim Importieren!"
+msgstr "%d Datensätze importiert"
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Fehler bei Import des Datensatzes %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Wizard"
@@ -1681,41 +1691,35 @@ msgstr "Wizard"
msgid "No String Attr."
msgstr "Kein Zeichen Attr."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Erstellt von"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Erstellt am"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Zuletzt verändert von"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Zuletzt verändert am"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr "Kann Sicht für den Menübaum nicht finden"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "Kann Sicht für den Menübaum nicht anwenden"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr ""
-"Sie müssen zuerst einen Datensatz auswählen, um die Beziehung anzeigen zu"
-" können!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1723,19 +1727,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_ilter"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Filterlesezeichen anzeigen"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Dieses Lesezeichen entfernen"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Diesen Filter als Lesezeichen hinzufügen"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Lesezeichenname:"
@@ -1763,24 +1767,24 @@ msgstr "Woche"
msgid "Select a File..."
msgstr "Datei auswählen..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Klartext anzeigen"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Wert hinzufügen"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "\"%s\" entfernen"
@@ -1797,25 +1801,25 @@ msgstr "Alle Dateien"
msgid "Images"
msgstr "Bilder"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Übersetzung"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Bearbeiten"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Unscharf"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr ""
-"Datensatz muss gespeichert werden, bevor eine Übersetzung hinzugefügt "
-"werden kann!"
+"Der Datensatz muss gespeichert werden, bevor eine Übersetzung hinzugefügt"
+" werden kann!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Keine anderen Sprachen verfügbar!"
@@ -1828,12 +1832,12 @@ msgstr "Bestehenden Datensatz hinzufügen"
msgid "Remove selected record <Del>"
msgstr "Ausgewählten Datensatz löschen <Entf>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Datensatz öffnen <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Datensatz suchen <F2>"
@@ -1925,15 +1929,10 @@ msgstr "PNG Bild (*.png)"
msgid "Image size too large!"
msgstr "Bild ist zu groß!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Unbekannt"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Aktuelle Sicht übersetzen"
diff --git a/share/locale/es_AR/LC_MESSAGES/tryton.mo b/share/locale/es_AR/LC_MESSAGES/tryton.mo
index ad5d258..2b5f699 100644
Binary files a/share/locale/es_AR/LC_MESSAGES/tryton.mo and b/share/locale/es_AR/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_AR/LC_MESSAGES/tryton.po b/share/locale/es_AR/LC_MESSAGES/tryton.po
index 693f4d5..6e9c5b7 100644
--- a/share/locale/es_AR/LC_MESSAGES/tryton.po
+++ b/share/locale/es_AR/LC_MESSAGES/tryton.po
@@ -1,14 +1,14 @@
# Spanish (Argentina) translations for tryton.
-# Copyright (C) 2012-2013 Thymbra Latinoamericana
+# Copyright (C) 2012-2014 Thymbra Latinoamericana
# This file is distributed under the same license as the tryton project.
-# Bruno M. Villasanti <bvillasanti at thymbra.com>, 2012-2013.
+# Bruno M. Villasanti <bvillasanti at thymbra.com>, 2012-2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: tryton 3.0.0\n"
+"Project-Id-Version: tryton 3.2.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-18 01:20-0300\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-17 16:35-0300\n"
"Last-Translator: Bruno M. Villasanti <bvillasanti at thymbra.com>\n"
"Language-Team: Argentina\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -64,62 +64,62 @@ msgstr "¡No se ha podido escribir el archivo de configuración %s!"
msgid "Unable to set locale %s"
msgstr "No se ha podido establecer el idioma %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Seleccione su acción"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "¡No se ha definido ninguna acción!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Conexión a Tryton"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Servidor:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Puerto:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Selección"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Su selección:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Guardar como..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Ignorar siempre esta advertencia."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "¿Desea continuar?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Confirmación"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Excepción de concurrencia"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -137,50 +137,50 @@ msgstr ""
" - \"Comparar\" para ver la versión modificada:\n"
" - \"Guardar de todas formas\" para guardar sus cambios."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Comparar"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Guardar de todas formas"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Error"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Informar de un error"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "¡Error de aplicación!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Error: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Para informar de errores debe tener una cuenta en <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Seguimiento de errores"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Usuario:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Contraseña:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -189,11 +189,11 @@ msgstr ""
"Para mantenerle informado añadiremos su usuario a la lista de interesados"
" en este asunto."
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Se creó un nuevo error con ID "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -201,11 +201,11 @@ msgstr ""
"¡Error de conexión!\n"
"¡Nombre de usuario o contraseña incorrectos!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Excepción:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
"La aplicación no se podrá conectar a este servidor hasta que se corrija "
"la huella de seguridad del servidor."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "¡Riesgo de seguridad!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
"¡Error de conexión!\n"
"¡No ha sido posible conectarse al servidor!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "¡Error de red!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "A"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "s"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Buscar...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Crear...</i>"
@@ -269,253 +269,257 @@ msgstr "<i>Crear...</i>"
msgid "Open the calendar <F2>"
msgstr "Abrir el calendario <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Selección de fecha"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "a"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "sí"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "verdadero"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "v"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Verdadero"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Falso"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Editar..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Adjuntos..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Acciones..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Relacionado..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
-msgstr "Informe..."
+msgstr "Informes..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "Correo electrónico..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Imprimir..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Archivo"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "U_suario"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Opciones"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "Fa_voritos"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Ay_uda"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Buscar"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "No se han encontrado resultados."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Conectar..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Desconectar"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "_Base de datos"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nueva base de datos..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Restaurar base de datos..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Hacer _copia de seguridad de la base de datos..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "_Eliminar base de datos..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Salir..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Preferencias..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Recargar menú"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Conmutar _menú"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
-msgstr "Búsqueda _Global"
+msgstr "Búsqueda _global"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Barra de herramien_tas"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "Por _defecto"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Texto _e iconos"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Iconos"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Texto"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "Barra de _menú"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Cambiar teclas rápidas"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Modo"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Formulario"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Guardar ancho/alto"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr "Guardar estado del árbol"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Corrección ortográfica"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Posición de las pestañas"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Superior"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Izquierda"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Derecha"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Inferior"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
-msgstr "_Anterior"
+msgstr "_Anterior pestaña"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
-msgstr "Siguiente"
+msgstr "_Siguiente pestaña"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
-msgstr "_Límite de búsqueda..."
+msgstr "Límite de búsqueda..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Correo electrónico..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Guardar opciones"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "Conse_jos..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Com_binaciones de teclas..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Acerca de..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Administrar favoritos"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -523,11 +527,11 @@ msgstr ""
"La acción seleccionada requiere cerrar todas las pestañas. \n"
"¿Desea continuar?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Cerrar pestaña"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -535,7 +539,7 @@ msgstr ""
"Va a eliminar una base de datos de Tryton.\n"
"¿Está seguro que quiere continuar?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -543,28 +547,28 @@ msgstr ""
"La contraseña del servidor Tryton es incorrecta.\n"
"Inténtelo de nuevo."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "¡Acceso denegado!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "La eliminación de la base de datos ha fallado con el mensaje de error:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "¡Falló la eliminación de la base de datos!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
-msgstr "¡La base de datos se ha eliminado correctamente!"
+msgstr "¡La base de datos se ha eliminado satisfactoriamente!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Abrir una copia de seguridad para restaurar..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -572,11 +576,11 @@ msgstr ""
"No es posible restaurar una base de datos protegida con contraseña.\n"
"La copia de seguridad y su restauración tiene que ser manual."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "¡La base de datos está protegida por contraseña!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -584,19 +588,19 @@ msgstr ""
"La contraseña del servidor Tryton es incorrecta.\n"
"Inténtelo de nuevo."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "La restauración de la base de datos ha fallado con el error:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "¡La restauración de la base de datos ha fallado!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "¡La base de datos se ha restaurado correctamente!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -604,75 +608,75 @@ msgstr ""
"No es posible hacer copia de una base de datos protegida por contraseña.\n"
"La copia de seguridad y su restauración tiene que ser manual."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "La extracción de la base de datos ha fallado con el mensaje de error:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "¡La extracción de la base de datos ha fallado!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "¡La copia de seguridad de la base de datos ha finalizado correctamente!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Nuevo"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Crear un nuevo registro"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Guardar"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Guardar este registro"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Cambiar vista"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Cambiar vista"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Recargar"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Recargar"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nuevo"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Guardar"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Cambiar vi_sta"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "_Recargar/Deshacer"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Eliminar..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "_Cerrar pestaña"
@@ -707,28 +711,28 @@ msgstr ""
"bloqueados.\n"
"Pulse en «Cambiar» para cambiar la dirección."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Crear nueva base de datos"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "C_rear"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Crear la nueva base de datos."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Configuración del servidor:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Conexión con el servidor:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -738,22 +742,22 @@ msgstr ""
"«8000» si el servidor está instalado en este ordenador. Pulse en "
"«Cambiar» para cambiar la dirección."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "C_ambiar"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Configurar la conexión con el servidor..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Contraseña del servidor Tryton:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -761,15 +765,15 @@ msgstr ""
"Esta es la contraseña del servidor Tryton. No corresponde a un usuario "
"real. Esta contraseña se suele definir en la configuración de trytond."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Nueva configuración de la base de datos:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Nombre de la base de datos:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -780,11 +784,11 @@ msgstr ""
"Puede utilizar caracteres alfanuméricos o _ (subrayado)\n"
"¡Evite cualquier acento, espacio o caracteres especiales! Ejemplo: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Idioma por defecto:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -794,11 +798,11 @@ msgstr ""
"Podrá instalar nuevos idiomas después de la instalación, a través del "
"menú de administración."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Contraseña del administrador:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -810,15 +814,15 @@ msgstr ""
"Nombre de usuario: admin\n"
"Contraseña: <La contraseña que introduzca aquí>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
-msgstr "Confirme la contraseña del administrador:"
+msgstr "Confirme la contraseña del Administrador:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
-msgstr "Teclee la contraseña del administrador de nuevo"
+msgstr "Teclee la contraseña del Administrador de nuevo"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -827,31 +831,31 @@ msgstr ""
" y \"_\" (subrayado). Evite todos los acentos, espacios y cualquier otro "
"carácter especial."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "¡Ha introducido caracteres incorrectos en el nombre de la base de datos!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
-"La nueva contraseña del administrador no coincide con el campo de "
+"La nueva contraseña del Administrador no coincide con el campo de "
"confirmación.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "¡Las contraseñas no coinciden!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
-"La contraseña del administrador y su confirmación son necesarias para "
+"La contraseña del Administrador y su confirmación son necesarias para "
"crear una nueva base de datos."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
-msgstr "¡Falta la contraseña del administrador!"
+msgstr "¡Falta la contraseña del Administrador!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -859,15 +863,15 @@ msgstr ""
"Ya existe una base de datos con el mismo nombre.\n"
"Inténtelo con otro nombre de base de datos."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "¡Ya existe una base de datos con este nombre!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "La contraseña del servidor Tryton no es correcta. Inténtelo de nuevo."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -880,7 +884,7 @@ msgstr ""
"adicional.\n"
"Mensaje de error:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "¡Se ha producido un error al crear la base de datos!"
@@ -928,7 +932,7 @@ msgstr "Eliminar la base de datos elegida."
msgid "Choose a Tryton database to delete:"
msgstr "Elija la base de datos Tryton a eliminar:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Conexión al servidor:"
@@ -1019,15 +1023,15 @@ msgstr "Servidor:"
msgid "User name:"
msgstr "Nombre de usuario:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Restaurar base de datos"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Archivo a restaurar:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1039,15 +1043,15 @@ msgstr ""
"¡Evite todos los acentos, espacios, o caracteres especiales! \n"
"Ejemplo: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Nombre de la nueva base de datos:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Actualizar base de datos:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1055,11 +1059,11 @@ msgstr ""
"Márquelo para que se realice una actualización automática de la base de "
"datos desde una versión anterior de Tryton, después de restaurarla."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Restaurar"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Restaurar la base de datos desde un archivo."
@@ -1099,154 +1103,158 @@ msgstr "Mensaje:"
msgid "Attachment:"
msgstr "Adjunto:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Anterior"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Registro anterior"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Siguiente"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Registro siguiente"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Adjunto(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Añadir un adjunto al registro"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Duplicar"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Anterior"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Sig_uiente"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Buscar"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Ver _Registro..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Mostrar versiones..."
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "Adjun_tos..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Acciones..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Relacionado..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Informes..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Correo electrónico..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "Im_primir..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Exportar datos..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Importar datos..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Adjunto(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
-msgstr "¡Debe elegir un registro!"
+msgstr "¡Debe seleccionar un registro!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Creado por:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Fecha de creación:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Última modificación por:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Última fecha de modificación:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Modelo:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "¿Está seguro que quiere eliminar este registro?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "¿Está seguro que quiere eliminar estos registros?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "¡Los registros no se han eliminado!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "¡Registros eliminados!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "¡Ahora está trabajando en el registro duplicado!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "¡Registro guardado!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
-msgstr "¡Formulario incorrecto!"
+msgstr "¡Formulario no válido!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " de "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1254,46 +1262,52 @@ msgstr ""
"Este registro ha sido modificado.\n"
"¿Desea guardarlo?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Acción"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Ejecutar acción"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
-msgstr "_Relacionado"
+msgstr "Relacionado"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Abrir registros relacionados"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Informes"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Abrir informe"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Email"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Informe por email"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Imprimir"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Imprimir informe"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconocido"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Límite"
@@ -1322,6 +1336,18 @@ msgstr "Preferencias"
msgid "Current Password:"
msgstr "Contraseña actual:"
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Versión"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Selecione una versión"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Versión:"
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Combinaciones de teclas"
@@ -1352,7 +1378,7 @@ msgstr "Campo anterior"
#: tryton/gui/window/shortcuts.py:34
msgid "Relation Entries Shortcuts"
-msgstr "Atajos en relaciones"
+msgstr "Atajos en campos de relación"
#: tryton/gui/window/shortcuts.py:35
msgid "Create new relation"
@@ -1376,11 +1402,11 @@ msgstr "Abrir relación"
#: tryton/gui/window/shortcuts.py:40
msgid "Mark line for deletion"
-msgstr "Marcar para eliminación"
+msgstr "Marcar línea para eliminación"
#: tryton/gui/window/shortcuts.py:41
msgid "Unmark line for deletion"
-msgstr "Desmarcar para eliminación"
+msgstr "Desmarcar línea para eliminación"
#: tryton/gui/window/shortcuts.py:44
msgid "Edition Widgets"
@@ -1501,21 +1527,21 @@ msgstr "Añadir nombres de _campo"
msgid "Name"
msgstr "Nombre"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "¿Cuál es el nombre de esta exportación?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "¡Se ha guardado %d registro!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "¡Se han guardado %d registros!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1530,26 +1556,26 @@ msgstr ""
msgid "Link"
msgstr "Enlace"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Añadir"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Eliminar <Supr>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Crear un nuevo registro <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Eliminar registro seleccionado <Supr>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Recuperar registro seleccionado <Ins>"
@@ -1572,10 +1598,10 @@ msgstr "Archivo a importar:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Abrir..."
@@ -1599,19 +1625,19 @@ msgstr "Codificación:"
msgid "Lines to Skip:"
msgstr "Líneas a omitir:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Nombre del campo"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "¡Primero debe elegir un archivo a importar!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Error al abrir el archivo CSV"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Se ha producido un error al procesar el archivo en el campo %s."
@@ -1626,24 +1652,7 @@ msgstr "¡Se ha importado %d registro!"
msgid "%d records imported!"
msgstr "¡Se han importado %d registros!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "¡Error de importación!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error importando registro %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Asistente"
@@ -1652,39 +1661,35 @@ msgstr "Asistente"
msgid "No String Attr."
msgstr "No tiene una cadena como atributo."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Creado por:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Fecha de creación:"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Última modificación por:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Última fecha de modificación:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr "No se ha podido obtener el estado del árbol"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "No se ha podido establecer el estado del árbol"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "¡Debe seleccionar un registro para usar la relación!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1692,19 +1697,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_iltros"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Muestra las búsquedas favoritas"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Eliminar de las búsquedas favoritas"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Guardar como búsqueda favorita"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Nombre de la búsqueda favorita:"
@@ -1732,24 +1737,24 @@ msgstr "Semana"
msgid "Select a File..."
msgstr "Seleccione un archivo..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Mostrar como texto plano"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Añadir un valor"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Eliminar \"%s\""
@@ -1766,23 +1771,23 @@ msgstr "Todos los archivos"
msgid "Images"
msgstr "Imágenes"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Traducción"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Editar"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Confuso"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "¡Debe guardar el registro antes de añadir traducciones!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "¡No hay otro idioma disponible!"
@@ -1795,12 +1800,12 @@ msgstr "Añadir un registro existente"
msgid "Remove selected record <Del>"
msgstr "Eliminar registro seleccionado <Supr>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Abrir registro <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Buscar registro <F2>"
@@ -1892,15 +1897,10 @@ msgstr "Imagen PNG (*.png)"
msgid "Image size too large!"
msgstr "¡El tamaño de la imagen es muy grande!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconocido"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Traducir vista"
diff --git a/share/locale/es_CO/LC_MESSAGES/tryton.mo b/share/locale/es_CO/LC_MESSAGES/tryton.mo
index 4b0d511..00ba0f5 100644
Binary files a/share/locale/es_CO/LC_MESSAGES/tryton.mo and b/share/locale/es_CO/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_CO/LC_MESSAGES/tryton.po b/share/locale/es_CO/LC_MESSAGES/tryton.po
index 3199327..0a847b3 100644
--- a/share/locale/es_CO/LC_MESSAGES/tryton.po
+++ b/share/locale/es_CO/LC_MESSAGES/tryton.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 2.4.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-17 14:37-0500\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-02 22:45-0500\n"
"Last-Translator: Oscar Alvarez <oscar.alvarez.montero at gmail.com>\n"
"Language-Team: Colombia\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -32,19 +32,19 @@ msgstr "Registra toda la información con nivel INFO"
#: tryton/config.py:91
msgid "specify the log level: DEBUG, INFO, WARNING, ERROR, CRITICAL"
-msgstr "Especifica the nivel log: DEBUG, INFO, WARNING, ERROR, CRITICAL"
+msgstr "especifique el nivel log: DEBUG, INFO, WARNING, ERROR, CRITICAL"
#: tryton/config.py:94
msgid "specify the login user"
-msgstr "Especifique el usuario"
+msgstr "especifique el usuario"
#: tryton/config.py:96
msgid "specify the server port"
-msgstr "Especifique el puerto del servidor"
+msgstr "especifique el puerto del servidor"
#: tryton/config.py:98
msgid "specify the server hostname"
-msgstr "Especifique el nombre del servidor"
+msgstr "especifique el nombre del servidor"
#: tryton/config.py:102
msgid "Too much arguments"
@@ -53,74 +53,74 @@ msgstr "Demasiados argumentos"
#: tryton/config.py:105
#, python-format
msgid "File \"%s\" not found"
-msgstr "El archivo «%s» no se ha encontrado"
+msgstr "No se ha encontró el archivo \"%s\""
#: tryton/config.py:143
#, python-format
msgid "Unable to write config file %s!"
-msgstr "¡No se ha podido escribir el archivo de configuración %s!"
+msgstr "No es posible modificar el archivo de configuración %s!"
#: tryton/translate.py:184
#, python-format
msgid "Unable to set locale %s"
msgstr "No se ha podido establecer el idioma %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Seleccione su acción"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
-msgstr "¡No se ha definido ninguna acción!"
+msgstr "No hay acción definida!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Conexión a Tryton"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Servidor:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Puerto:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Selección"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Su selección:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Guardar como..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Ignorar siempre esta advertencia."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
-msgstr "¿Desea continuar?"
+msgstr "Desea continuar?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Confirmación"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
-msgstr "Excepción de concurrencia"
+msgstr "Excepción de Concurrencia"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -138,50 +138,50 @@ msgstr ""
" - \"Comparar\" para ver la versión modificada:\n"
" - \"Guardar de todas formas\" para guardar sus cambios."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Comparar"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Guardar de todas formas"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Error"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
-msgstr "Informar de un fallo"
+msgstr "Reportar Fallo"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
-msgstr "¡Error de aplicación!"
+msgstr "Error de Aplicación!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Error: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
-msgstr "Para informar de fallos debe tener una cuenta en <u>%s</u>"
+msgstr "Para reportar fallos debe tener una cuenta en <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
-msgstr "Seguimiento de fallos"
+msgstr "Seguimiento de Fallos"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Usuario:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Contraseña:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -190,79 +190,79 @@ msgstr ""
"Para mantenerle informado añadiremos su usuario a la lista de interesados"
" en este asunto."
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Se creó un nuevo fallo con ID "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
msgstr ""
-"¡Error de conexión!\n"
-"¡Nombre de usuario o contraseña incorrectos!"
+"Error de conexión!\n"
+"Nombre de usuario o contraseña incorrectos!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Excepción:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
" is fixed."
msgstr ""
-"¡La huella de seguridad del servidor ha cambiado desde la última "
-"conexión!\n"
-"La aplicación no se podrá conectar a este servidor hasta que se corrija "
-"la huella de seguridad del servidor."
+"La huella de seguridad del servidor ha cambiado desde la última conexión!"
+"\n"
+"La aplicación detendrá la conexión al servidor hasta que se corrija la "
+"huella de seguridad."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
-msgstr "¡Riesgo de seguridad!"
+msgstr "Riesgo de Seguridad!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
msgstr ""
-"¡Error de conexión!\n"
-"¡No ha sido posible conectarse al servidor!"
+"Error de conexión!\n"
+"No ha sido posible conectarse al servidor!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "¡Error de Red!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "A"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "s"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Buscar...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Crear...</i>"
@@ -270,253 +270,258 @@ msgstr "<i>Crear...</i>"
msgid "Open the calendar <F2>"
msgstr "Abrir el calendario <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
-msgstr "Selección de fecha"
+msgstr "Selección de Fecha"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "s"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "sí"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "verdadero"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "v"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Verdadero"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Falso"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "_Salir..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Adjuntos..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Acciones..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Relacionado..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Informes..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
-msgstr "Correo electrónico..."
+msgstr "Correo Electrónico..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Imprimir..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Archivo"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "U_suario"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Opciones"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "Fa_voritos"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Ay_uda"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Buscar"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "No hay resultados."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Conectar..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Desconectar"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "_Base de datos"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
-msgstr "_Nueva base de datos..."
+msgstr "_Nueva Base de Datos..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
-msgstr "_Restaurar base de datos..."
+msgstr "_Restaurar Base de Datos..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
-msgstr "Hacer _copia de seguridad de la base de datos..."
+msgstr "_Copia de Seguridad de la Base de Datos..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
-msgstr "_Eliminar base de datos..."
+msgstr "_Eliminar Base de Datos..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Salir..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Preferencias..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Recargar Menú"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Conmutar _Menú"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "_Busqueda Global"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Barra de herramien_tas"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
-msgstr "Por _defecto"
+msgstr "Por _Defecto"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "_Texto e Iconos"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Iconos"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Texto"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
-msgstr "Barra de _menú"
+msgstr "Barra de _Menú"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Cambiar Teclas Rápidas"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Modo"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
-msgstr "_PDA"
+msgstr "_Celular"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Formulario"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Guardar ancho/alto"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr "Guardar Estado de Árbol"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
-msgstr "Corrección ortográfica"
+msgstr "Corrección Ortográfica"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
-msgstr "Posición de las pestañas"
+msgstr "Posición de Pestañas"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Superior"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Izquierda"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Derecha"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Inferior"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "_Anterior Pestaña"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "_Siguiente Pestaña"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
-msgstr "Límite de búsqueda..."
+msgstr "Límite de Búsqueda..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Correo Electrónico..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Guardar Opciones"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "Conse_jos..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Com_binaciones de teclas..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Acerca de..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Administrar Favoritos"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -524,48 +529,48 @@ msgstr ""
"La acción seleccionada requiere cerrar todas las pestañas. \n"
"¿Desea continuar?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Cerrar pestaña"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
msgstr ""
"Va a eliminar una base de datos de Tryton.\n"
-"¿Está seguro que quiere continuar?"
+"Está seguro que quiere continuar?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
msgstr ""
-"La contraseña del servidor Tryton es incorrecta.\n"
+"La contraseña del Servidor Tryton es incorrecta.\n"
"Inténtelo de nuevo."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "¡Acceso denegado!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "La eliminación de la base de datos ha fallado con el mensaje de error:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
-msgstr "¡Falló la eliminación de la base de datos!"
+msgstr "Falló la eliminación de la base de datos!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
-msgstr "¡La base de datos se ha eliminado correctamente!"
+msgstr "La base de datos se ha eliminado satisfactoriamente!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
-msgstr "Abrir una copia de seguridad para restaurar..."
+msgstr "Abrir una Copia de Seguridad a Restaurar..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -573,11 +578,11 @@ msgstr ""
"No es posible restaurar una base de datos protegida con contraseña.\n"
"La copia de seguridad y su restauración tiene que ser manual."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
-msgstr "¡La base de datos está protegida por contraseña!"
+msgstr "La base de datos está protegida por contraseña!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -585,19 +590,19 @@ msgstr ""
"La contraseña del servidor Tryton es incorrecta.\n"
"Inténtelo de nuevo."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "La restauración de la base de datos ha fallado con el error:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "¡La restauración de la base de datos ha fallado!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "¡La base de datos se ha restaurado correctamente!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -605,75 +610,75 @@ msgstr ""
"No es posible hacer copia de una base de datos protegida por contraseña.\n"
"La copia de seguridad y su restauración tiene que ser manual."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "La extracción de la base de datos ha fallado con el mensaje de error:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
-msgstr "¡La extracción de la base de datos ha fallado!"
+msgstr "La extracción de la base de datos ha fallado!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "¡La copia de seguridad de la base de datos ha finalizado correctamente!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Nuevo"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Crear un nuevo registro"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Guardar"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Guardar este registro"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Cambiar vista"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Cambiar vista"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Recargar"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Recargar"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nuevo"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Guardar"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Cambiar Vi_sta"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "_Recargar/Deshacer"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Eliminar..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "_Cerrar pestaña"
@@ -684,12 +689,12 @@ msgid ""
"change the address."
msgstr ""
"Esta es la URL del servidor Tryton. Use el servidor «localhost» y el "
-"puerto «8000» si el servidor está instalado en este ordenador. Pulse en "
+"puerto «8000» si el servidor está instalado en este ordenador. Pulse "
"«Cambiar» para cambiar la dirección."
#: tryton/gui/window/dbcreate.py:45
msgid "No connection!"
-msgstr "¡No hay conexión!"
+msgstr "No hay conexión!"
#: tryton/gui/window/dbcreate.py:48
msgid ""
@@ -700,7 +705,7 @@ msgid ""
"that the server address and port (usually 8000) are not blocked.\n"
"Click on 'Change' to change the address."
msgstr ""
-"¡No se ha podido conectar al servidor!\n"
+"No se ha podido conectar al servidor!\n"
"1. Revise si el servidor se está ejecutando.\n"
"2. Averigüe en qué dirección y puerto está escuchando.\n"
"3. Si hay un cortafuegos entre el servidor y este cliente, asegúrese que "
@@ -708,28 +713,28 @@ msgstr ""
"bloqueados.\n"
"Pulse en «Cambiar» para cambiar la dirección."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Crear nueva base de datos"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "C_rear"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Crear la nueva base de datos."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Configuración del Servidor:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Conexión con el servidor:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -739,22 +744,22 @@ msgstr ""
"«8000» si el servidor está instalado en este ordenador. Pulse en "
"«Cambiar» para cambiar la dirección."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "C_ambiar"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Configurar la conexión con el servidor..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
-msgstr "Contraseña del servidor Tryton:"
+msgstr "Contraseña del Servidor Tryton:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -762,15 +767,15 @@ msgstr ""
"Esta es la contraseña del servidor Tryton. No corresponde a un usuario "
"real. Esta contraseña se suele definir en la configuración de trytond."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Nueva configuración de la base de datos:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Nombre de la base de datos:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -781,11 +786,11 @@ msgstr ""
"Puede utilizar caracteres alfanuméricos o _ (subrayado)\n"
"¡Evite cualquier acento, espacio o caracteres especiales! Ejemplo: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Idioma por defecto:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -795,11 +800,11 @@ msgstr ""
"Podrá instalar nuevos idiomas después de la instalación, a través del "
"menú de administración."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Contraseña del administrador:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -811,15 +816,15 @@ msgstr ""
"Nombre de usuario: admin\n"
"Contraseña: <La contraseña que introduzca aquí>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
-msgstr "Confirme la contraseña del administrador:"
+msgstr "Confirme la contraseña del Administrador:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
-msgstr "Teclee la contraseña del administrador de nuevo"
+msgstr "Teclee la contraseña del Administrador de nuevo"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -828,31 +833,31 @@ msgstr ""
" y \"_\" (subrayado). Evite todos los acentos, espacios y cualquier otro "
"carácter especial."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "¡Ha introducido caracteres incorrectos en el nombre de la base de datos!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
-"La nueva contraseña del administrador no coincide con el campo de "
+"La nueva contraseña del Administrador no coincide con el campo de "
"confirmación.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "¡Las contraseñas no coinciden!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
-"La contraseña del administrador y su confirmación son necesarias para "
+"La contraseña del Administrador y su confirmación son necesarias para "
"crear una nueva base de datos."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
-msgstr "¡Falta la contraseña del administrador!"
+msgstr "¡Falta la contraseña del Administrador!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -860,15 +865,15 @@ msgstr ""
"Ya existe una base de datos con el mismo nombre.\n"
"Inténtelo con otro nombre de base de datos."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
-msgstr "¡Ya existe una base de datos con este nombre!"
+msgstr "Ya existe una base de datos con este nombre!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "La contraseña del servidor Tryton no es correcta. Inténtelo de nuevo."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -881,21 +886,21 @@ msgstr ""
"adicional.\n"
"Mensaje de error:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
-msgstr "¡Se ha producido un error al crear la base de datos!"
+msgstr "Se ha producido un error al crear la base de datos!"
#: tryton/gui/window/dbdumpdrop.py:26
msgid "Could not connect to server!"
-msgstr "¡No se ha podido conectar al servidor!"
+msgstr "No se ha podido conectar al servidor!"
#: tryton/gui/window/dbdumpdrop.py:30
msgid "This client version is not compatible with the server!"
-msgstr "¡Esta versión del cliente no es compatible con el servidor!"
+msgstr "Esta versión del cliente no es compatible con el servidor!"
#: tryton/gui/window/dbdumpdrop.py:39
msgid "No database found, you must create one!"
-msgstr "¡No se ha encontrado ninguna base de datos, debe crear una!"
+msgstr "No se ha encontrado ninguna base de datos, debe crear una!"
#: tryton/gui/window/dbdumpdrop.py:77
msgid "Backup a database"
@@ -929,18 +934,18 @@ msgstr "Eliminar la base de datos elegida."
msgid "Choose a Tryton database to delete:"
msgstr "Elija la base de datos Tryton a eliminar:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Conexión al servidor:"
#: tryton/gui/window/dbdumpdrop.py:156 tryton/gui/window/dblogin.py:89
#: tryton/gui/window/dblogin.py:444
msgid "Database:"
-msgstr "Base de datos:"
+msgstr "Base de Datos:"
#: tryton/gui/window/dblogin.py:31
msgid "Profile Editor"
-msgstr "Editor de perfiles"
+msgstr "Perfiles"
#: tryton/gui/window/dblogin.py:46
msgid "Profile"
@@ -1020,15 +1025,15 @@ msgstr "Servidor:"
msgid "User name:"
msgstr "Nombre de usuario:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Restaurar base de datos"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Archivo a restaurar:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1040,27 +1045,27 @@ msgstr ""
"¡Evite todos los acentos, espacios, o caracteres especiales! \n"
"Ejemplo: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Nombre de la nueva base de datos:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Actualizar base de datos:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
msgstr ""
-"Seleccionar para realizar una actualización automática de la base de "
+"Confirme si desea realizar una actualización automática de la base de "
"datos desde una versión anterior de Tryton, después de restaurarla."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Restaurar"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Restaurar la base de datos desde un archivo."
@@ -1100,154 +1105,158 @@ msgstr "Mensaje:"
msgid "Attachment:"
msgstr "Adjunto:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Anterior"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Registro Anterior"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Siguiente"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Registro Siguiente"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Adjunto(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Agregar un adjunto al registro"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Duplicar"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Anterior"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Sig_uiente"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Buscar"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Ver _Registro..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "Adjun_tos..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Acciones..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Relacionado..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Informes..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Correo Electrónico..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "Im_primir..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Exportar datos..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Importar datos..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Adjunto(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
-msgstr "¡Debe elegir un registro!"
+msgstr "Debe seleccionar un registro!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Creado por Usuario:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Fecha de Creación:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Última Modificación por:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
-msgstr "Última Fecha de Modificación:"
+msgstr "Fecha de Última Modificación:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Modelo:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
-msgstr "¿Está seguro que quiere eliminar este registro?"
+msgstr "Está seguro que quiere eliminar este registro?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
-msgstr "¿Está seguro que quiere eliminar estos registros?"
+msgstr "Está seguro que quiere eliminar estos registros?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
-msgstr "¡Los registros no se han eliminado!"
+msgstr "Los registros no se han eliminado!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
-msgstr "¡Registros eliminados!"
+msgstr "Registros eliminados!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
-msgstr "¡Está trabajando ahora en el registro duplicado!"
+msgstr "Está trabajando ahora registro(s) duplicado(s)!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "¡Registro guardado!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "¡Formulario no válido!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " de "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1255,53 +1264,59 @@ msgstr ""
"Este registro ha sido modificado.\n"
"¿Desea guardarlo?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Acción"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Lanzar acción"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
-msgstr "_Relacionado"
+msgstr "Relacionado"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Abrir registros relacionados"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Informes"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Abrir informe"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Email"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Informe por email"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Imprimir"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Imprimir informe"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconocido"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Límite"
#: tryton/gui/window/limit.py:26
msgid "Search Limit Settings"
-msgstr "Preferencias del límite de búsqueda"
+msgstr "Preferencias de Límite de Búsqueda"
#: tryton/gui/window/limit.py:29
msgid "Limit:"
@@ -1313,7 +1328,7 @@ msgstr "Preferencias"
#: tryton/gui/window/preference.py:49
msgid "Edit User Preferences"
-msgstr "Editar preferencias de usuario"
+msgstr "Editar Preferencias de Usuario"
#: tryton/gui/window/preference.py:75
msgid "Preference"
@@ -1321,7 +1336,21 @@ msgstr "Preferencias"
#: tryton/gui/window/preference.py:88
msgid "Current Password:"
-msgstr "Contraseña actual:"
+msgstr "Contraseña Actual:"
+
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Anterior"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Selección"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
@@ -1365,7 +1394,7 @@ msgstr "Abrir/Buscar relación"
#: tryton/gui/window/shortcuts.py:37
msgid "List Entries Shortcuts"
-msgstr "Atajos en listas"
+msgstr "Atajos en Listas"
#: tryton/gui/window/shortcuts.py:38
msgid "Create new line"
@@ -1377,15 +1406,15 @@ msgstr "Abrir relación"
#: tryton/gui/window/shortcuts.py:40
msgid "Mark line for deletion"
-msgstr "Marcar para eliminación"
+msgstr "Marcar línea para eliminación"
#: tryton/gui/window/shortcuts.py:41
msgid "Unmark line for deletion"
-msgstr "Desmarcar para eliminación"
+msgstr "Desmarcar línea para eliminación"
#: tryton/gui/window/shortcuts.py:44
msgid "Edition Widgets"
-msgstr "Controles de edición"
+msgstr "Controles de Edición"
#: tryton/gui/window/tips.py:17
msgid ""
@@ -1476,11 +1505,11 @@ msgstr "Limpiar"
#: tryton/gui/window/win_export.py:94
msgid "Save Export"
-msgstr "Guardar exportación"
+msgstr "Guardar Exportación"
#: tryton/gui/window/win_export.py:103
msgid "Delete Export"
-msgstr "Eliminar exportación"
+msgstr "Eliminar Exportación"
#: tryton/gui/window/win_export.py:114
msgid "<b>Fields to export</b>"
@@ -1502,21 +1531,21 @@ msgstr "Añadir nombres de _campo"
msgid "Name"
msgstr "Nombre"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "¿Cuál es el nombre de esta exportación?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
-msgstr "¡Se ha guardado %d registro!"
+msgstr "%d registro guardado!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
-msgstr "¡Se han guardado %d registros!"
+msgstr "%d registros guardados!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1531,26 +1560,26 @@ msgstr ""
msgid "Link"
msgstr "Enlace"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Añadir"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Eliminar <Supr>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Crear un nuevo registro <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Eliminar registro seleccionado <Supr>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Recuperar registro seleccionado <Ins>"
@@ -1561,7 +1590,7 @@ msgstr "Importar desde CSV"
#: tryton/gui/window/win_import.py:76
msgid "Auto-Detect"
-msgstr "Auto-detectar"
+msgstr "Auto-Detectar"
#: tryton/gui/window/win_import.py:93
msgid "<b>Fields to import</b>"
@@ -1573,10 +1602,10 @@ msgstr "Archivo a importar:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Abrir..."
@@ -1586,7 +1615,7 @@ msgstr "Parámetros CSV"
#: tryton/gui/window/win_import.py:124
msgid "Field Separator:"
-msgstr "Separador de campo:"
+msgstr "Separador de Campo:"
#: tryton/gui/window/win_import.py:133
msgid "Text Delimiter:"
@@ -1598,21 +1627,21 @@ msgstr "Codificación:"
#: tryton/gui/window/win_import.py:150
msgid "Lines to Skip:"
-msgstr "Líneas a omitir:"
+msgstr "Líneas a Omitir:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Nombre del campo"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
-msgstr "¡Primero debe elegir un archivo a importar!"
+msgstr "Primero debe elegir un archivo a importar!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Error al abrir el archivo CSV"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Se ha producido un error al procesar el archivo en el campo %s."
@@ -1620,31 +1649,14 @@ msgstr "Se ha producido un error al procesar el archivo en el campo %s."
#: tryton/gui/window/win_import.py:364
#, python-format
msgid "%d record imported!"
-msgstr "¡%d registro importado!"
+msgstr "%d registro importado!"
#: tryton/gui/window/win_import.py:366
#, python-format
msgid "%d records imported!"
-msgstr "¡Se han importado %d registros!"
+msgstr "%d registros importados!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "¡Error de importación!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error importando registro %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Asistente"
@@ -1653,39 +1665,35 @@ msgstr "Asistente"
msgid "No String Attr."
msgstr "No tiene una cadena como atributo."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Creado por Usuario"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Fecha de Creación"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Modificado por Usuario"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Fecha de Modificación"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
-msgstr ""
+msgstr "No es posible encontrar el estado de la vista de árbol"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "No se puede fijar la vista de estado del árbol"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "¡Debe seleccionar un registro para usar la relación!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1693,19 +1701,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_iltros"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Mostrar marcadores de filtros"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Eliminar este marcador"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Marcar este filtro"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Nombre del Marcador:"
@@ -1727,37 +1735,37 @@ msgstr "Vista Mensual"
#: tryton/gui/window/view_form/view/calendar_gtk/toolbar.py:115
msgid "Week"
-msgstr ""
+msgstr "Semana"
#: tryton/gui/window/view_form/view/form_gtk/binary.py:47
msgid "Select a File..."
msgstr "Seleccione un archivo..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Mostrar como texto plano"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Agregar valor"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Remover \"%s\""
#: tryton/gui/window/view_form/view/form_gtk/image.py:51
msgid "Select an Image..."
-msgstr "Seleccione una imagen..."
+msgstr "Seleccione una Imagen..."
#: tryton/gui/window/view_form/view/form_gtk/image.py:121
msgid "All files"
@@ -1767,25 +1775,25 @@ msgstr "Todos los archivos"
msgid "Images"
msgstr "Imágenes"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Traducción"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Editar"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Confuso"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
-msgstr "¡Debe guardar el registro antes de añadir traducciones!"
+msgstr "Debe guardar el registro antes de añadir traducciones!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
-msgstr "¡No hay otro idioma disponible!"
+msgstr "No hay otro idioma disponible!"
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:58
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:61
@@ -1796,12 +1804,12 @@ msgstr "Agregar registro existente"
msgid "Remove selected record <Del>"
msgstr "Eliminar registro seleccionado <Supr>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Abrir registro <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Buscar registro <F2>"
@@ -1891,17 +1899,12 @@ msgstr "Imagen PNG (*.png)"
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:93
msgid "Image size too large!"
-msgstr "¡El tamaño de la imagen es muy grande!"
+msgstr "La imagen es muy grande!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ":"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconocido"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Traducir vista"
diff --git a/share/locale/es_ES/LC_MESSAGES/tryton.mo b/share/locale/es_ES/LC_MESSAGES/tryton.mo
index 338eddc..6342c42 100644
Binary files a/share/locale/es_ES/LC_MESSAGES/tryton.mo and b/share/locale/es_ES/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_ES/LC_MESSAGES/tryton.po b/share/locale/es_ES/LC_MESSAGES/tryton.po
index b2ab627..ab03387 100644
--- a/share/locale/es_ES/LC_MESSAGES/tryton.po
+++ b/share/locale/es_ES/LC_MESSAGES/tryton.po
@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 2.4.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-18 23:43+0100\n"
-"Last-Translator: Jordi Esteve (Zikzakmedia) <jesteve at zikzakmedia.com>\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-18 00:04+0100\n"
+"Last-Translator: Jordi Esteve <jesteve at zikzakmedia.com>\n"
"Language-Team: <tryton-es at googlegroups.com>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
@@ -69,62 +69,62 @@ msgstr "No se ha podido escribir el archivo de configuración %s."
msgid "Unable to set locale %s"
msgstr "No se ha podido establecer el idioma %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Seleccione su acción"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "No se ha definido ninguna acción."
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Conexión a Tryton"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Servidor:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Puerto:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Selección"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Su selección:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Guardar como..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Ignorar siempre esta advertencia."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "¿Desea continuar?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Confirmación"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Excepción de concurrencia"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -142,50 +142,50 @@ msgstr ""
" - \"Comparar\" para ver la versión modificada:\n"
" - \"Guardar de todas formas\" para guardar sus cambios."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Comparar"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Guardar de todas formas"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Error"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Informar de un error"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Error de aplicación."
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Error: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Para informar de errores debe tener una cuenta en <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Seguimiento de errores"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Usuario:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Contraseña:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -194,11 +194,11 @@ msgstr ""
"Para mantenerle informado añadiremos su usuario a la lista de interesados"
" en esta incidencia."
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Se creó un nuevo error con identificador"
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -206,11 +206,11 @@ msgstr ""
"Error de conexión.\n"
"Nombre de usuario o contraseña incorrectos."
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Excepción:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -221,12 +221,12 @@ msgstr ""
"La aplicación no se podrá conectar a este servidor hasta que se corrija "
"la huella de seguridad del servidor."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Riesgo de seguridad."
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -234,39 +234,39 @@ msgstr ""
"Error de conexión.\n"
"No ha sido posible conectarse al servidor."
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Error de red."
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "A"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "s"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Buscar...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Crear...</i>"
@@ -274,253 +274,257 @@ msgstr "<i>Crear...</i>"
msgid "Open the calendar <F2>"
msgstr "Abrir el calendario <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Selección de fecha"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "a"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "sí"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "verdadero"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "v"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Verdadero"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Falso"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Editar..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Adjuntos..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Acciones..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Relacionado..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Informe..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "Correo electrónico..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Imprimir..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Archivo"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "U_suario"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Opciones"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "Fa_voritos"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Ay_uda"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Buscar"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "No se han encontrado resultados."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Conectar..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Desconectar"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "_Base de datos"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nueva base de datos..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Restaurar base de datos..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Hacer _copia de seguridad de la base de datos..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "_Eliminar base de datos..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Salir..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Preferencias..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Recargar menú"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Conmutar _menú"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "Búsqueda _global"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Barra de herramien_tas"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "Por _defecto"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Texto _e iconos"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Iconos"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Texto"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "Barra de _menú"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Cambiar teclas rápidas"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Modo"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Formulario"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Guardar ancho/alto"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr "Guardar estado de expansión del árbol"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Corrección ortográfica"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Posición de las pestañas"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Superior"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Izquierda"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Derecha"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Inferior"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "_Anterior"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "Siguiente"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "_Límite de búsqueda..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Correo electrónico..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Guardar opciones"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "Conse_jos..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Com_binaciones de teclas..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Acerca de..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Administrar menús favoritos"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -528,11 +532,11 @@ msgstr ""
"La acción seleccionada requiere cerrar todas las pestañas. \n"
"¿Desea continuar?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Cerrar pestaña"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -540,7 +544,7 @@ msgstr ""
"Va a eliminar una base de datos de Tryton.\n"
"¿Está seguro que quiere continuar?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -548,28 +552,28 @@ msgstr ""
"La contraseña del servidor Tryton es incorrecta.\n"
"Inténtelo de nuevo."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Acceso denegado."
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "La eliminación de la base de datos ha fallado con el mensaje de error:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Falló la eliminación de la base de datos."
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "La base de datos se ha eliminado correctamente."
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Abrir una copia de seguridad para restaurar..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -577,11 +581,11 @@ msgstr ""
"No es posible restaurar una base de datos protegida con contraseña.\n"
"La copia de seguridad y su restauración tiene que ser manual."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "La base de datos está protegida con contraseña."
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -589,19 +593,19 @@ msgstr ""
"La contraseña del servidor Tryton es incorrecta.\n"
"Inténtelo de nuevo."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "La restauración de la base de datos ha fallado con el error:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "La restauración de la base de datos ha fallado."
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "La base de datos se ha restaurado correctamente."
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -609,75 +613,75 @@ msgstr ""
"No es posible hacer copia de una base de datos protegida con contraseña.\n"
"La copia de seguridad y su restauración tiene que ser manual."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "La extracción de la base de datos ha fallado con el mensaje de error:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "La extracción de la base de datos ha fallado."
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "La copia de seguridad de la base de datos ha finalizado correctamente."
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Nuevo"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Crear un nuevo registro"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Guardar"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Guardar este registro"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Cambiar vista"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Cambiar vista"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Recargar"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Recargar"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nuevo"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Guardar"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Cambiar vi_sta"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "_Recargar/Deshacer"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Eliminar..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "_Cerrar pestaña"
@@ -712,28 +716,28 @@ msgstr ""
"bloqueados.\n"
"Pulse en «Cambiar» para cambiar la dirección."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Crear nueva base de datos"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "C_rear"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Crear la nueva base de datos."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Configuración del servidor:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Conexión con el servidor:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -743,22 +747,22 @@ msgstr ""
"«8000» si el servidor está instalado en este ordenador. Pulse en "
"«Cambiar» para cambiar la dirección."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "C_ambiar"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Configurar la conexión con el servidor..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Contraseña del servidor Tryton:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -766,15 +770,15 @@ msgstr ""
"Esta es la contraseña del servidor Tryton. No corresponde a un usuario "
"real. Esta contraseña se define en la configuración de trytond."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Nueva configuración de la base de datos:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Nombre de la base de datos:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -785,11 +789,11 @@ msgstr ""
"Puede utilizar caracteres alfanuméricos o _ (subrayado)\n"
"Evite cualquier acento, espacio o caracteres especiales. Ejemplo: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Idioma por defecto:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -799,11 +803,11 @@ msgstr ""
"Podrá instalar nuevos idiomas después de la instalación, a través del "
"menú de administración."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Contraseña del administrador:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -815,15 +819,15 @@ msgstr ""
"Nombre de usuario: admin\n"
"Contraseña: <La contraseña que introduzca aquí>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Confirme la contraseña del administrador:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Teclee la contraseña del administrador de nuevo"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -832,31 +836,31 @@ msgstr ""
" y \"_\" (subrayado). Evite todos los acentos, espacios y cualquier otro "
"carácter especial."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Ha introducido caracteres incorrectos en el nombre de la base de datos."
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
"La nueva contraseña del administrador no coincide con el campo de "
"confirmación.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Las contraseñas no coinciden."
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"La contraseña del administrador y su confirmación son necesarias para "
"crear una nueva base de datos."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Falta la contraseña del administrador."
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -864,15 +868,15 @@ msgstr ""
"Ya existe una base de datos con el mismo nombre.\n"
"Inténtelo con otro nombre de base de datos."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Ya existe una base de datos con este nombre."
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "La contraseña del servidor Tryton no es correcta. Inténtelo de nuevo."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -885,7 +889,7 @@ msgstr ""
"adicional.\n"
"Mensaje de error:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Se ha producido un error al crear la base de datos."
@@ -933,7 +937,7 @@ msgstr "Eliminar la base de datos elegida."
msgid "Choose a Tryton database to delete:"
msgstr "Elija la base de datos Tryton a eliminar:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Conexión al servidor:"
@@ -1024,15 +1028,15 @@ msgstr "Servidor:"
msgid "User name:"
msgstr "Nombre de usuario:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Restaurar base de datos"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Archivo a restaurar:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1044,15 +1048,15 @@ msgstr ""
"Evite todos los acentos, espacios, o caracteres especiales. \n"
"Ejemplo: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Nombre de la base de datos nueva:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Actualizar base de datos:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1060,11 +1064,11 @@ msgstr ""
"Márquelo para que se realice una actualización automática de la base de "
"datos desde una versión anterior de Tryton, después de restaurarla."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Restaurar"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Restaurar la base de datos desde un archivo."
@@ -1104,154 +1108,158 @@ msgstr "Mensaje:"
msgid "Attachment:"
msgstr "Adjunto:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Anterior"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Registro anterior"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Siguiente"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Registro siguiente"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Adjunto(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Añadir un adjunto al registro"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Duplicar"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Anterior"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Sig_uiente"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Buscar"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Ver _registro..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Mostrar versiones..."
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "Adjun_tos..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Acciones..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Relacionado..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Informes..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Correo electrónico..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "Im_primir..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Exportar datos..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Importar datos..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Adjunto(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Debe elegir un registro."
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Creado por:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Fecha de creación:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Última modificación por:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Última fecha de modificación:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Modelo:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "¿Está seguro que quiere eliminar este registro?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "¿Está seguro que quiere eliminar estos registros?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Los registros no se han eliminado."
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Registros eliminados."
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Ahora está trabajando en el registro duplicado."
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Registro guardado."
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Formulario incorrecto."
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " de "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1259,46 +1267,52 @@ msgstr ""
"Este registro ha sido modificado.\n"
"¿Desea guardarlo?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Acción"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Ejecutar acción"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "_Relacionado"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Abrir registros relacionados"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Informes"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Abrir informe"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Email"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Informe por email"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Imprimir"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Imprimir informe"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconocido"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Límite"
@@ -1327,6 +1341,18 @@ msgstr "Preferencias"
msgid "Current Password:"
msgstr "Contraseña actual:"
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Versión"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Seleccionar una versión"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Versión:"
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Combinaciones de teclas"
@@ -1506,21 +1532,21 @@ msgstr "Añadir nombres de _campo"
msgid "Name"
msgstr "Nombre"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "¿Cuál es el nombre de esta exportación?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "Se ha guardado %d registro."
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "Se han guardado %d registros."
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1535,26 +1561,26 @@ msgstr ""
msgid "Link"
msgstr "Enlace"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Añadir"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Eliminar <Supr>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Crear un nuevo registro <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Eliminar registro seleccionado <Supr>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Recuperar registro seleccionado <Ins>"
@@ -1577,10 +1603,10 @@ msgstr "Archivo a importar:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Abrir..."
@@ -1604,19 +1630,19 @@ msgstr "Codificación:"
msgid "Lines to Skip:"
msgstr "Líneas a omitir:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Nombre del campo"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Primero debe elegir un archivo a importar."
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Error al abrir el archivo CSV"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Se ha producido un error al procesar el archivo en el campo %s."
@@ -1631,24 +1657,7 @@ msgstr "Se ha importado %d registro."
msgid "%d records imported!"
msgstr "Se han importado %d registros."
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Error de importación."
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error importando registro %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Asistente"
@@ -1657,39 +1666,35 @@ msgstr "Asistente"
msgid "No String Attr."
msgstr "No tiene una cadena como atributo."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Creado por:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Fecha de creación:"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Última modificación por:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Última fecha de modificación:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr "No se ha podido obtener el estado de expansión del árbol"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "No se ha podido establecer el estado de expansión del árbol"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Debe seleccionar un registro para usar la relación."
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1697,19 +1702,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_iltros"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Muestra las búsquedas favoritas"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Eliminar de las búsquedas favoritas"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Guardar como búsqueda favorita"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Nombre de la búsqueda favorita:"
@@ -1737,24 +1742,24 @@ msgstr "Semana"
msgid "Select a File..."
msgstr "Seleccionar un archivo..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Mostrar como texto plano"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Añadir un valor"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Eliminar \"%s\""
@@ -1771,23 +1776,23 @@ msgstr "Todos los archivos"
msgid "Images"
msgstr "Imágenes"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Traducción"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Editar"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Confuso"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Debe guardar el registro antes de añadir traducciones."
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "No hay otro idioma disponible."
@@ -1800,12 +1805,12 @@ msgstr "Añadir un registro existente"
msgid "Remove selected record <Del>"
msgstr "Eliminar registro seleccionado <Supr>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Abrir registro <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Buscar registro <F2>"
@@ -1897,15 +1902,10 @@ msgstr "Imagen PNG (*.png)"
msgid "Image size too large!"
msgstr "El tamaño de la imagen es muy grande."
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ":"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconocido"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Traducir vista"
diff --git a/share/locale/fr_FR/LC_MESSAGES/tryton.mo b/share/locale/fr_FR/LC_MESSAGES/tryton.mo
index e3d0d78..2550dde 100644
Binary files a/share/locale/fr_FR/LC_MESSAGES/tryton.mo and b/share/locale/fr_FR/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/fr_FR/LC_MESSAGES/tryton.po b/share/locale/fr_FR/LC_MESSAGES/tryton.po
index d1dd02e..7bcaffa 100644
--- a/share/locale/fr_FR/LC_MESSAGES/tryton.po
+++ b/share/locale/fr_FR/LC_MESSAGES/tryton.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 0.0.1\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2013-04-19 23:58+0200\n"
-"Last-Translator: Cédric Krier <ced at b2ck.com>\n"
+"Last-Translator: Nicolas Évrard <nicolas.evrard at b2ck.com>\n"
"Language-Team: fr_FR\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"MIME-Version: 1.0\n"
@@ -64,62 +64,62 @@ msgstr "Impossible d'écrire le fichier de configuration %s !"
msgid "Unable to set locale %s"
msgstr "Impossible de sélectionner la locale %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Sélectionnez votre action"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Pas d'action définie !"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Connexion Tryton"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Serveur :"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Port :"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Sélection"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Votre sélection :"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Enregistrer sous..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Toujours ignorer cet avertissement."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "Souhaitez-vous continuer ?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Confirmation"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Erreur d'accès concurrent"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -138,50 +138,50 @@ msgstr ""
" - \"Comparer\" pour voir la nouvelle version;\n"
" - \"Écraser\" pour sauver vos modifications."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Comparer"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Écraser"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Erreur"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Rapporter un bogue"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Erreur Applicative !"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Erreur : "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Pour rapporter un bogue vous devez avoir un compte sur <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Bug Tracker"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Utilisateur :"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Mot de passe :"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
"Pour vous garder informé, votre nom d'utilisateur a été ajouté à la liste"
" de suivi de ce bogue"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Un nouveau bogue a été créé avec l'ID "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
"Erreur de connexion !\n"
"Mauvais nom d'utilisateur ou mot de passe !"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Exception :"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
"Les connections à ce serveur sont annulées tant que son empreinte n'est "
"pas corrigée."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Alerte sécurité !"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
"Erreur de connexion !\n"
"Impossible de se connecter au serveur !"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Erreur réseau"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "A"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "s"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "j"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Recherche...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Créer...</i>"
@@ -269,253 +269,257 @@ msgstr "<i>Créer...</i>"
msgid "Open the calendar <F2>"
msgstr "Ouvrir le calendrier <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Sélection de la date"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "y"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "oui"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "vrai"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "v"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Vrai"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Faux"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Éditer..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Pièces jointes..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Actions..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Relation..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Rapport..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "Email..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Imprimer..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Fichier"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Utilisateur"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Options"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "Fa_voris"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "_Aide"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Recherche"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "Aucun résultat trouvé"
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Connecter..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Déconnecter"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "_Base de données"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nouvelle base de données..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Restaurer une base de données..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "_Sauvegarder une base de données..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Su_pprimer une base de données..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Quitter..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Préférences..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Recharger le menu"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
-msgstr "Montrer/Cacher le _Menu"
+msgstr "Montrer/Cacher le _menu"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "Recherche _globale"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "_Barre d'outils"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "_Défaut"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "_Textes et Icônes"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Icônes"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Textes"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "_Barre de Menu"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Changer les raccourcis"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Mode"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Formulaire"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Sauver largeur / hauteur"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
-msgstr "Sauver l'état d'arbre développé"
+msgstr "Sauver l'état des arbres"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Vérifier l'orthographe"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Position des onglets"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Dessus"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Gauche"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Droite"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Dessous"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "Onglet _Précédent"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "Onglet _Suivant"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Limite la recherche à ..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Email..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Sauver les options"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "_Astuces..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Raccourcis _Clavier..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_À Propos..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Gérer les favoris"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -523,11 +527,11 @@ msgstr ""
"L'action suivante nécessite de fermer tous les onglets.\n"
"Voulez-vous continuer?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Fermer l'onglet"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -535,7 +539,7 @@ msgstr ""
"Vous allez supprimer une base de données Tryton.\n"
"Êtes-vous sûr de vouloir continuer ?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -543,30 +547,30 @@ msgstr ""
"Mauvais mot de passe du serveur Tryton.\n"
"Essayez à nouveau."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Accès refusé !"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr ""
"La suppression de la base de données a échouée avec le message d'erreur :"
"\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "La suppression de la base de données a échouée !"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "La base de données a été supprimée avec succès !"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Ouvrir le Fichier de Sauvergarde..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -575,11 +579,11 @@ msgstr ""
"mot de passe.\n"
"La sauvegarde et la restauration doivent être faites manuellement."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "La base de données est protégée par un mot de passe !"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -587,21 +591,21 @@ msgstr ""
"Mauvais mot de passe du serveur Tryton.\n"
"Essayez à nouveau."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr ""
"La restauration de la base de données a échouée avec le message d'erreur "
":\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "La restauration de la base de données a échoué !"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "La base de données a été restaurée avec succès !"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -610,75 +614,75 @@ msgstr ""
" mot de passe.\n"
"La sauvegarde et la restauration doivent être faites manuellement."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "La sauvegarde de la base de donnée a échouée avec le message d'erreur :\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "La sauvegarde de la base de données a échouée !"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "La base de données a été sauvegardée avec succès !"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Nouveau"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Créer un nouvel enregistrement"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Sauver"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Sauver cet enregistrement"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Basculer"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Basculer la vue"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Recharger"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Recharger"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nouveau"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Sauver"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "_Changer de vue"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "_Recharger/Annuler"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "Su_pprimer..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "_Fermer l'onglet"
@@ -713,28 +717,28 @@ msgstr ""
"bloqués.\n"
"Cliquez sur 'Changer' pour changer l'adresse."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Créer une nouvelle base de données"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "C_réer"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Créer une nouvelle base de données"
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Configuration du serveur :"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Connexion au serveur :"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -744,22 +748,22 @@ msgstr ""
" si le serveur est installé sur cette machine. Cliquez sur 'Changer' pour"
" changer l'adresse."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "C_hanger"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Configurer la connexion au serveur"
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Mot de passe du serveur Tryton :"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -768,15 +772,15 @@ msgstr ""
"vrai utilisateur. Ce mot de passe est défini dans la configuration de "
"trytond."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Configuration de la nouvelle base de données :"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Nom de la base de données :"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -789,11 +793,11 @@ msgstr ""
"Vous devez proscrire les accents, espaces ou caractères spéciaux ! "
"Example : tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Langue par défaut :"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -803,11 +807,11 @@ msgstr ""
"données. Vous pourrez installer d'autres langues après l'installation "
"sous le menu administration."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Mot de passe admin :"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -820,15 +824,15 @@ msgstr ""
"Nom d'utilisateur : admin\n"
"Mot de passe : <Le mot de passe que vous avez choisi>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Confirmer le mot de passe admin :"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Entrer le mot de passe admin à nouveau"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -838,29 +842,29 @@ msgstr ""
" 63 caractères.\n"
"Les accents, espaces et autres caractères spéciaux sont proscrit."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Mauvais caractères dans le nom de base de données !"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "Le mot de passe admin ne correspond pas au mot de passe de confirmation.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Les mots de passe ne correspondent pas !"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"Le mot de passe admin et de confirmation sont requis pour créer une "
"nouvelle base de données."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Mot de passe admin manquant !"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -868,17 +872,17 @@ msgstr ""
"Une base de données avec le même nom existe déjà.\n"
"Essayer un autre nom de base de données."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "La base de données existe déjà !"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr ""
"Désolé, le mot de passe du serveur Tryton est incorrect. Veuillez "
"réessayer."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -890,7 +894,7 @@ msgstr ""
"Supprimer la ! Vérifiez le message d'erreur pour plus d'information.\n"
"Message d'erreur :\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Erreur de création de base de données !"
@@ -938,7 +942,7 @@ msgstr "Supprimer la base de données choisie."
msgid "Choose a Tryton database to delete:"
msgstr "Choisissez la base de données à supprimer"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Connexion au serveur :"
@@ -1029,15 +1033,15 @@ msgstr "Hôte :"
msgid "User name:"
msgstr "Nom d'utilisateur :"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Restaurer une base de données"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Fichier à restaurer :"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1050,15 +1054,15 @@ msgstr ""
"Vous devez proscrire les accents, espaces ou caractères spéciaux !\n"
"Example : tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Nom de la nouvelle base de données :"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Mettre à jour la base de données :"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1066,11 +1070,11 @@ msgstr ""
"Cocher pour une mise à jour automatique de la base de données après "
"restauration d'une base de données d'une version précédente de Tryton."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Restaurer"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Restaurer la base de données depuis le fichier."
@@ -1110,154 +1114,158 @@ msgstr "Corps :"
msgid "Attachment:"
msgstr "Attachement :"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Précédent"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Enregistrement précédent"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Suivant"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Enregistrement suivant"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Attachement(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Ajouter un attachement à l'enregistrement"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Dupliquer"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Précédent"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Sui_vant"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Recherche"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Voir les _Logs..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Afficher les révisions..."
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "_Pièce jointes..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Actions..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Relation..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Rapport..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Email..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "_Imprimer..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Export de données..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Import de données..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Attachement(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Vous devez sélectionner un enregistrement !"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID :"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Créé par l'utilisateur :"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Date de création :"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Dernière modification par :"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Date de dernière modification :"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Modèle :"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Êtes-vous sûr de vouloir supprimer cet enregistrement ?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Êtes-vous sûr de vouloir supprimer ces enregistrements ?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Enregistrements non supprimés !"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Enregistrements supprimés !"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Sur les enregistrement(s) dupliqué(s) maintenant !"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Enregistrement sauvé !"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Formulaire non-valide !"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " de "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1265,46 +1273,52 @@ msgstr ""
"Cet enregistrement a été modifié\n"
"Voulez-vous le sauvegarder ?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Actions"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Lancer une action"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "Relation"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Ouvrir les enregistrements liés"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Rapport"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Ouvrir un rapport"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Email"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Rapport par email"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Imprimer"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Imprimer un rapport"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Inconnu"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Limite"
@@ -1333,6 +1347,18 @@ msgstr "Préférence"
msgid "Current Password:"
msgstr "Mot de passe actuel :"
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Révision"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Sélectionner une révision"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Révision :"
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Raccourcis clavier"
@@ -1455,7 +1481,7 @@ msgid ""
"You can save any graphs in PNG file with right-click on it.\n"
msgstr ""
"<b>Export des graphes</b>\n"
-"Vous pouvez exporter les graphes en PNG via un clic droit."
+"Vous pouvez exporter les graphes en PNG via un clic droit.\n"
#: tryton/gui/window/tips.py:46
msgid "Tips"
@@ -1511,21 +1537,21 @@ msgstr "Ajouter les noms des champs"
msgid "Name"
msgstr "Nom"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Quel est le nom de cet export ?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d enregistrement sauvé!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d enregistrements sauvés!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1540,26 +1566,26 @@ msgstr ""
msgid "Link"
msgstr "Lien"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Ajouter"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Supprimer <Del>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Créer un nouvel enregistrement<F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Supprimer l'enregistrement sélectionné<Del>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Restaurer l'enregistrement sélectionné<Ins>"
@@ -1582,10 +1608,10 @@ msgstr "Fichier à importer"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Ouvrir..."
@@ -1609,19 +1635,19 @@ msgstr "Codage :"
msgid "Lines to Skip:"
msgstr "Lignes à ignorer :"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Nom du champ"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Vous devez d'abord sélectionner un fichier d'import !"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Erreur d'ouverture du fichier CSV"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Erreur lors du traitement du fichier du champ %s."
@@ -1636,24 +1662,7 @@ msgstr "%d enregistrement importé!"
msgid "%d records imported!"
msgstr "%d enregistrements importés!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Erreur d'importation !"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Erreur d'import de l'enregistrement %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Wizard"
@@ -1662,39 +1671,35 @@ msgstr "Wizard"
msgid "No String Attr."
msgstr "Pas d'attribut string."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Créé par l'utilisateur"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Date de création"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Modifié par l'utilisateur"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Date de modification"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr "Impossible d'obtenir l'état de la vue arbre"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "Impossible de définir l'état de la vue arbre"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Vous devez sélectionner un enregistrement pour utiliser la relation !"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1702,19 +1707,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_iltrer"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Montrer les marques-pages des filtres"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Supprimer ce marque-page"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Sauver ce filtre"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Nom du marque-page"
@@ -1742,24 +1747,24 @@ msgstr "Semaine"
msgid "Select a File..."
msgstr "Sélectionner un fichier ..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Montrer en text clair"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Ajouter une valeur"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr " :"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Supprimer \"%s\""
@@ -1776,23 +1781,23 @@ msgstr "Tous les fichiers"
msgid "Images"
msgstr "Images"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Traduction"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Éditer"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Floue"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Vous devez sauvegarder l'enregistrement avant d'ajouter des traductions !"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Pas d'autre langue disponible !"
@@ -1805,12 +1810,12 @@ msgstr "Ajouter un enregistrement existant"
msgid "Remove selected record <Del>"
msgstr "Supprimer l'enregistrement sélectionné<Del>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Ouvrir un enregistrement<F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Chercher un enregistrement<F2>"
@@ -1902,15 +1907,10 @@ msgstr "image PNG (*.png)"
msgid "Image size too large!"
msgstr "Taille de l'image trop grande !"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Inconnu"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Traduire la vue"
diff --git a/share/locale/ja_JP/LC_MESSAGES/tryton.mo b/share/locale/ja_JP/LC_MESSAGES/tryton.mo
index ce40e6e..4bab3a1 100644
Binary files a/share/locale/ja_JP/LC_MESSAGES/tryton.mo and b/share/locale/ja_JP/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ja_JP/LC_MESSAGES/tryton.po b/share/locale/ja_JP/LC_MESSAGES/tryton.po
index 86f9d8f..25179f6 100644
--- a/share/locale/ja_JP/LC_MESSAGES/tryton.po
+++ b/share/locale/ja_JP/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 1.5.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2012-04-23 11:07+0200\n"
"Last-Translator: TANIGUCHI Takaki <takaki at asis.media-as.org>\n"
"Language-Team: ja_JP <LL at li.org>\n"
@@ -64,62 +64,62 @@ msgstr "設定ファイル %s が書きこめません!"
msgid "Unable to set locale %s"
msgstr "%s ロケールに設定できません"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "動作を選択する"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "動作が定義されていません!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton接続"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "サーバー名:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "ポート番号:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "選択"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "あなたの選択:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "名前を付けて保存"
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "常にこの警告を無視する。"
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr ""
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "確認"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "並列性例外"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
#, fuzzy
msgid ""
"<b>Write Concurrency Warning:</b>\n"
@@ -138,50 +138,50 @@ msgstr ""
" - \"比較\"で変更されたものを見る\n"
" - \"とにかく書き込む\"で現在の物を書き込む。\n"
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "比較"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "とにかく書き込む"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "エラー"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "バグ報告"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "アプリケーションエラー!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "エラー:"
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, fuzzy, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "記録しておきたいバグを報告<u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "バグトラッカー"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "ユーザー:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "パスワード:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -189,11 +189,11 @@ msgstr ""
"別のユーザーに同じバグが報告されています。\n"
"お知らせするためにこの問題の通知リストにあなたのユーザー名を追加しました。"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "新しいバグがID番号と一緒に作成されました"
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -201,11 +201,11 @@ msgstr ""
"接続エラー!\n"
"ユーザー名またはパスワードが違います!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "例外:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -214,12 +214,12 @@ msgstr ""
"このサーバーのフィンガープリントが最後の接続から変化しています!\n"
"フィンガープリントが訂正されるまで接続を停止します。"
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "セキュリティリスク!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -227,39 +227,39 @@ msgstr ""
"接続エラー!\n"
"サーバーに接続できません!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "ネットワーク エラー!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "年"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "月"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "週"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "日"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "時"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "分"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr ""
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr ""
@@ -268,273 +268,278 @@ msgstr ""
msgid "Open the calendar <F2>"
msgstr "カレンダーを開く"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "日付を選択"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
#, fuzzy
msgid "yes"
msgstr "バイト"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
#, fuzzy
msgid "true"
msgstr "真"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "真"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "偽"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "終了(_Q)"
+
+#: tryton/common/popup_menu.py:77
#, fuzzy
msgid "Attachments..."
msgstr "添付:"
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
#, fuzzy
msgid "Actions..."
msgstr "実行(_A)"
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
#, fuzzy
msgid "Relate..."
msgstr "削除(_D)"
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
#, fuzzy
msgid "Report..."
msgstr "データのインポート(_I)"
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
#, fuzzy
msgid "E-Mail..."
msgstr "Eメール(_E)"
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
#, fuzzy
msgid "Print..."
msgstr "印刷(_P)"
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "ファイル(_F)"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "ユーザー(_U)"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "オプション(_O)"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr ""
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "ヘルプ(_H)"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "検索"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr ""
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "接続(_C)"
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "切断(_D)"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "データベース(_b)"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "新規データベース(_N)"
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "データベースの復元(_R)"
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "データベースのバックアップ(_B)"
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "データベースの削除(_P)"
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "終了(_Q)"
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "設定(_P)"
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
#, fuzzy
msgid "_Menu Reload"
msgstr "再読み込み(_R)"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr ""
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr ""
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "ツールバー(_T)"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "デフォルト(_D)"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "テキストとアイコン(_T)"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "アイコン(_I)"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "テキスト(_T)"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "メニューバー(_M)"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "アクセラレーターの変更"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "モード(_M)"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "ノーマル(_N)"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "フォーム(_F)"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "幅/高さを保存"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr ""
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "スペルチェック"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "タブの位置"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "上"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "左"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "右"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "下"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
#, fuzzy
msgid "_Previous Tab"
msgstr "前(_P)"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr ""
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr ""
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "Eメール(_E)"
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "オプションの保存(_S)"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "今日の技(_T)"
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "キーボードショートカット(_K)"
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "Trytonについて"
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr ""
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
msgstr ""
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "タブを閉じる"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -542,7 +547,7 @@ msgstr ""
"Trytonデータベースを削除します。\n"
"本当に実行しますか?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -550,28 +555,28 @@ msgstr ""
"Trytonサーバのパスワードが違います\n"
"もう一度試して下さい。"
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "アクセスが拒否されました!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "データベースの削除に失敗しました。エラーメッセージ:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "データベースの削除に失敗しました!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "データベースの削除に成功しました!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "復元のためバックアップファイルを開く"
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -579,11 +584,11 @@ msgstr ""
"パスワードで保護されたデータベースを復元できません。\n"
"バックアップと復元は手動でする必要があります。"
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "データベースはパスワードで保護されています!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -591,19 +596,19 @@ msgstr ""
"Trytonサーバーのパスワードが違います。\n"
"もう一度試して下さい。"
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "データベースの復元に失敗しました。エラーメッセージ:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "データベースの復元に失敗しました!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "データベースの復元に成功しました!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -611,75 +616,75 @@ msgstr ""
"パスワードで保護されたデータベースのダンプはできません。\n"
"バックアップと復元は手動でする必要があります。"
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "データベースのダンプに失敗しました。エラーメッセージ:"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "データベースのダンプに失敗しました!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "データベースのバックアップに成功しました!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr ""
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "レコードの新規作成"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "保存"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "レコードの保存"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "切替"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "ビューの切替"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "再読み込み(_R)"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "再読み込み"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "新規(_N)"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "保存(_S)"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "ビューの切替(_S)"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "再読み込み/やり直し(_R)"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "削除(_D)"
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "タブを閉じる(_C)"
@@ -712,28 +717,28 @@ msgstr ""
"サーバーとクライアントの間にファイアウォールがある場合,サーバーのアドレスとポート番号(通常は8070)がブロックされてないか確かめて下さい。\n"
"'変更'をクリックしてアドレスを変更して下さい。"
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "新しいデータベースを作成する"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "作成(_C)"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "新しいデータベースを作成する。"
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "サーバーセットアップ:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "サーバー接続:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
#, fuzzy
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
@@ -741,36 +746,36 @@ msgid ""
" address."
msgstr "これはサーバーのURLです。このコンピュータにサーバーがインストールされていればサーバーは'localhost'でポート番号は'8070'です。'変更'をクリックしてアドレスを変更します。"
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "変更(_C)"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "サーバ接続をセットアップする"
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Trytonサーバパスワード:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
msgstr "これはTrytonサーバーのパスワードです。ユーザーに結びつけられてはいません。このパスワードはtrytondの設定で定義されています。"
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "新規データベースセットアップ:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "データベース名:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -781,22 +786,22 @@ msgstr ""
"英数字と_(アンダースコア)が使えます。\n"
"アセントや空白・特殊文字は避けて下さい! 例: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "デフォルトの言語:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
"administration menu."
msgstr "このデータベースにインストールするデフォルトの言語を選択。インストール後に管理者メニューから新しい言語をインストールできます。"
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "管理者パスワード:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -807,55 +812,55 @@ msgstr ""
"ユーザー名: admin\n"
"パスワード: <ここにパスワードを入力>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "管理者パスワードを確認:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "管理者パスワードを再入力して下さい"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
msgstr "データベース名は英数字と\"_\"(アンダースコア)に制限されています。アセントや空白や特殊文字は避けて下さい。"
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "データベース名に正しくない文字があります!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "管理者パスワードが再確認入力と一致しません\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "パスワードが一致しません!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr "新しいデータベースを作成するのに管理者パスワードと確認用パスワードが必要です。"
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "管理者パスワードがありません!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
msgstr "同じ名前のデータベースが存在します。別の名前を試して下さい。"
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "このデータベース名は存在します!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Trytonサーバーのパスワードが違います。再び試して下さい。"
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -866,7 +871,7 @@ msgstr ""
"作成されていたとしても壊れているでしょう。データベースが削除されているかもしれません。可能な情報をエラーメッセージでチェックして下さい。\n"
"エラーメッセージ:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "データベースの作成エラー!"
@@ -914,7 +919,7 @@ msgstr "選択されたデータベースを削除します。"
msgid "Choose a Tryton database to delete:"
msgstr "削除するTrytonデータベースを選択:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "サーバ接続:"
@@ -1012,15 +1017,15 @@ msgstr "ポート番号:"
msgid "User name:"
msgstr "ユーザー名:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "データベースの復元"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "復元するファイル:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1032,25 +1037,25 @@ msgstr ""
"アセントや空白・特殊文字は使えません!\n"
"例: tryton "
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "新しいデータベース名:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "データベースをアップデートする:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
msgstr "以前のTrytonのバージョンのデータベースから復元したデータベースが自動的に更新できるか確認"
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "復元"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "データベースをファイルから復元"
@@ -1090,159 +1095,163 @@ msgstr "本文:"
msgid "Attachment:"
msgstr "添付:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "前"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "前のレコード"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "次"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "次のレコード"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "添付(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "レコードに添付を追加する"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "複製(_D)"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "前(_P)"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "次(_N)"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
#, fuzzy
msgid "_Search"
msgstr "検索"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "ログの閲覧(_L)"
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
#, fuzzy
msgid "A_ttachments..."
msgstr "添付:"
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "実行(_A)"
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
#, fuzzy
msgid "_Relate..."
msgstr "削除(_D)"
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
#, fuzzy
msgid "_Report..."
msgstr "データのインポート(_I)"
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
#, fuzzy
msgid "_E-Mail..."
msgstr "Eメール(_E)"
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "印刷(_P)"
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "データのエクスポート(_E)"
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "データのインポート(_I)"
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "添付(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "レコードを一つ選択して下さい!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "作成ユーザー:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "作成日:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "最終更新ユーザー:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "最終更新日:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "モデル:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "このレコードを削除しますか?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "このレコードを削除しますか?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "レコードが削除されませんでした!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "レコードが削除されました!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "重複したレコードで作業中です!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "レコードが保存されました!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "不正なフォームです!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " 中 "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1250,51 +1259,57 @@ msgstr ""
"レコードが変更されています\n"
"保存しますか?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "実行"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr ""
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
#, fuzzy
msgid "Relate"
msgstr "作成(_C)"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
#, fuzzy
msgid "Open related records"
msgstr "レコードを開く"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
#, fuzzy
msgid "Report"
msgstr "レポート"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
#, fuzzy
msgid "Open report"
msgstr "レコードを開く"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
#, fuzzy
msgid "E-Mail"
msgstr "Eメール"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr ""
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "印刷"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr ""
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "未知"
+
#: tryton/gui/window/limit.py:17
#, fuzzy
msgid "Limit"
@@ -1324,6 +1339,20 @@ msgstr "設定"
msgid "Current Password:"
msgstr "現在のパスワード:"
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "前"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "選択"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "キーボードショートカット"
@@ -1499,21 +1528,21 @@ msgstr "フィールド名を追加(_F)"
msgid "Name"
msgstr "名前"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "このエクスポートの名前は何ですか?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d レコード保存されました!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d レコード保存されました!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1528,28 +1557,28 @@ msgstr ""
msgid "Link"
msgstr "リンク"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "追加"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr ""
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
#, fuzzy
msgid "Create a new record <F3>"
msgstr "レコードの新規作成"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
#, fuzzy
msgid "Delete selected record <Del>"
msgstr "選択したレコードを削除"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
#, fuzzy
msgid "Undelete selected record <Ins>"
@@ -1573,10 +1602,10 @@ msgstr "インポートするファイル:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "開く"
@@ -1601,19 +1630,19 @@ msgstr "エンコーディング:"
msgid "Lines to Skip:"
msgstr "スキップする行:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "フィールド名"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "最初にインポートするファイルを選択して下さい!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "CSVファイルを開くときにエラーが起こりました"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, fuzzy, python-format
msgid "Error processing the file at field %s."
msgstr "ファイルの%sフィールドの処理でエラーが起こりました。"
@@ -1628,20 +1657,7 @@ msgstr "%d レコードをインポートしました!"
msgid "%d records imported!"
msgstr "%d レコードをインポートしました。"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "インポートのエラーです!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "ウィザード"
@@ -1650,45 +1666,41 @@ msgstr "ウィザード"
msgid "No String Attr."
msgstr "文字属性なし。"
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
#, fuzzy
msgid "ID"
msgstr "日"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
#, fuzzy
msgid "Creation User"
msgstr "作成ユーザー:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
#, fuzzy
msgid "Creation Date"
msgstr "作成日:"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
#, fuzzy
msgid "Modification User"
msgstr "最終更新日:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
#, fuzzy
msgid "Modification Date"
msgstr "最終更新日:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
msgid "Unable to set view tree state"
msgstr "%s ロケールに設定できません"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "リレーションを使うにはレコードを選択して下さい!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ""
@@ -1697,19 +1709,19 @@ msgstr ""
msgid "F_ilters"
msgstr "ファイル(_F)"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr ""
@@ -1741,24 +1753,24 @@ msgstr ""
msgid "Select a File..."
msgstr "ファイルを選択"
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr ""
@@ -1776,24 +1788,24 @@ msgstr "全てのファイル"
msgid "Images"
msgstr "画像"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
#, fuzzy
msgid "Translation"
msgstr "翻訳を追加"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "翻訳を追加する前にレコードを保存して下さい!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "他の利用できる言語はありません"
@@ -1808,13 +1820,13 @@ msgstr "レコードの保存"
msgid "Remove selected record <Del>"
msgstr "選択したレコードを削除"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
#, fuzzy
msgid "Open a record <F2>"
msgstr "レコードを開く"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
#, fuzzy
msgid "Search a record <F2>"
msgstr "レコードを検索する"
@@ -1909,15 +1921,10 @@ msgstr "PNG画像 (*.png)"
msgid "Image size too large!"
msgstr "画像サイズが大きすぎます!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ":"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "未知"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "翻訳ビュー"
diff --git a/share/locale/lt_LT/LC_MESSAGES/tryton.mo b/share/locale/lt_LT/LC_MESSAGES/tryton.mo
index 83c4de8..ae0f525 100644
Binary files a/share/locale/lt_LT/LC_MESSAGES/tryton.mo and b/share/locale/lt_LT/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/lt_LT/LC_MESSAGES/tryton.po b/share/locale/lt_LT/LC_MESSAGES/tryton.po
index 5039e81..c00e29f 100644
--- a/share/locale/lt_LT/LC_MESSAGES/tryton.po
+++ b/share/locale/lt_LT/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 2.3.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2013-04-18 11:37+0300\n"
"Last-Translator: Giedrius Slavinskas <giedrius at inovera.lt>\n"
"Language-Team: lt_LT <LL at li.org>\n"
@@ -65,62 +65,62 @@ msgstr ""
msgid "Unable to set locale %s"
msgstr "Nepavyko nustatyti lokalės %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Pasirinkite veiksmą"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Nėra apibrėžtų veiksmų!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton prisijungimas"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Serveris:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Prievadas:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Pasirinkimas"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Jūsų pasirinkimas:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Įrašyti kaip..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Daugiau nepaisyti šio pranešimo."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "Ar tikrai norite vykdyti?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Patvirtinimas"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Lygiagretaus duomenų rašymo klaida"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -138,50 +138,50 @@ msgstr ""
" - \"Palyginti\", kad peržiūrėti pakeistą versiją;\n"
" - \"Rašyti visvien\", kad išsaugoti jūsų turimą versiją."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Palyginti"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Rašyti visvien"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Klaida"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Pranešti apie klaidą"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Programos klaida!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Klaida: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Klaidų pranešimui reikalinga naudotojo paskyra <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Klaidų pėdsekys"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Naudotojas:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Slaptažodis:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
"Norėdami informuoti apie klaidos tvarkymo eigą, jūsų naudotojo vardas "
"buvo pridėtas prie klaidos pranešimo sąrašo"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Užregistruoti naują klaidą su ID"
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
"Prisijungimo klaida!\n"
"Neteisingas naudotojo vardas arba slaptažodis!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Klaida:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -217,12 +217,12 @@ msgstr ""
"Programa nustos jungtis su šiuos serveriui, kol bus sutvarkytas "
"identifikatorius."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Saugumo pavojus!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -230,39 +230,39 @@ msgstr ""
"Prisijungimo klaida!\n"
"Nepavyko prisijungti prie serverio!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Tinklo klaida!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "Y"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "w"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "h"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Ieškoti...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Sukurti...</i>"
@@ -270,254 +270,259 @@ msgstr "<i>Sukurti...</i>"
msgid "Open the calendar <F2>"
msgstr "Atverti kalendorių <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Datos pasirinkimas"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "t"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "taip"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "teisa"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "t"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Tiesa"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Netiesa"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Išei_ti..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Priedai..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Veiksmai..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Susiję įrašai..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Ataskaita..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "El. paštas..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Spausdinti..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Failas"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Naudotojas"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Parinktys"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "_Mėgstami"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "_Žinynas"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Ieškoti"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "Nerasta rezultatų."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Prisijungti..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "_Atsijungti"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "Duomenų bazė"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nauja duomenų bazė..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Atkurti duomenų bazę..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "_Duomenų bazės atsarginė kopija..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Nai_kinti duomenų bazę"
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "Išei_ti..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "Nus_tatymai..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "Pekrauti meniu"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Įjungti/išjungti _meniu"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "Globali paieška"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Įrankių _juosta"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "_Numatytasis"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "_Tekstas ir piktogramos"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "P_iktogramos"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Tekstas"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "_Meniu juosta"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Keisti trumpinius"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Rėžimas"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "Sta_ndartinis"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "_Forma"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Įsiminti plotį/aukštį"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
#, fuzzy
msgid "Save Tree State"
msgstr "Įsiminti hierarchinio sąrašo išskleistas šakas"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Rašybos klaidų tikrinimas"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Kortelių pozicija"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Viršuje"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Kairėje"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Dešinėje"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Apačioje"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "_Buvusi kortelė"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "Kita kortelė"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Paieškos ribojimas..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_El. paštas..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "Iš_saugoti pasirinktis"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "Pa_tarimai..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "_Trumpiniai..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Apie..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Tvarkyti mėgstamus"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -525,11 +530,11 @@ msgstr ""
"Atliekant šį veiksmą bus uždarytos visos kortelės.\n"
"Ar norite tęsti?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Uždaryti kortelę"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -537,7 +542,7 @@ msgstr ""
"Bus ištrinta Tryton duomenų bazė.\n"
"Ar jūs tikrai norite tęsti?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -545,28 +550,28 @@ msgstr ""
"Neteisingas Tryon serverio slaptažodis\n"
"Bandykite iš naujo."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Neturite teisių!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "Nepavyko sunaikinti duomenų bazės. Klaidos pranešimas:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Nepavyko sunaikinti duomenų bazės!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "Sėkmingai sunaikinta duomenų bazė!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Atverti atsarginę kopiją atkūrimui..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -574,11 +579,11 @@ msgstr ""
"Negalima atkurti duomenų bazės apsaugotos slaptažodžiu.\n"
"Atsarginės kopijos sukūrimą bei atkūrimą atlikite savarankiškai."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "Duomenų bazės slaptažodis yra apsaugotas!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -586,19 +591,19 @@ msgstr ""
"Neteisingas Tryton serverio slaptažodis.\n"
"Bandykite iš naujo."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "Nepavyko sunaikinti duomenų bazės. Klaidos pranešimas:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Nepavyko sunaikinti duomenų bazės!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "Sėkmingai sunaikinta duomenų bazė!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -607,75 +612,75 @@ msgstr ""
"kopijos.\n"
"Atsarginės kopijos sukūrimą bei atkūrimą atlikite savarankiškai."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Nepavyko padaryti duomenų bazės atsarginės kopijos.Klaidos pranešimas:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Nepavyko padaryti duomenų bazės atsarginės kopijos!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "Sėkmingai padaryta duomenų bazės atsarginė kopija!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Naujas"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Sukurti naują įrašą"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Išsaugoti"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Išsaugoti šį įrašą"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Perjungti"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Perjungti rodymą"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "Pe_rkrauti"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Perkrauti"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Naujas"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Saugoti"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "_Perjungti rodymą"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "Pe_rkrauti/atšaukti"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "_Ištrinti..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "Uždaryti _kortelę"
@@ -709,28 +714,28 @@ msgstr ""
"serverio adresas ir prievadas (dažniausiai 8000) yra neužblokuoti.\n"
"Spauskite 'Keisti', kad pakeisti serverio jungtį."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Kurti naują duomenų bazę"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "Ku_rti"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Kurti naują duomenų bazę"
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Serverio nustatymai:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Serverio jungtis:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -740,22 +745,22 @@ msgstr ""
"'8000', jeigu serveris įdiegtas šiame kompiuteryje. Spauskite ant "
"'Keisti' norėdami pakeisti serverio adresą."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "Ke_isti"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Keisti serverio jungtį..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Tryton serverio slaptažodis:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -764,15 +769,15 @@ msgstr ""
"kuriam nors naudotojui. Slaptažodis dažniausiai nurodomas trytond "
"konfiguraciniame faile."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Naujos duomenų bazės nustatymai:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Duomenų bazės pavadinimas:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -785,11 +790,11 @@ msgstr ""
"Negalima įvesti nelotyniškų raidžių, tarpų bei skyrybos ženklų! Pavyzdys:"
" tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Numatytoji kalba:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -799,11 +804,11 @@ msgstr ""
"Papildomas kalbas galima įdiegti per administravimo meniu, kai bus "
"sukurta nauja duomenų bazė"
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Administratoriaus slaptažodis:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -815,15 +820,15 @@ msgstr ""
"Naudotojas: admin\n"
"Slaptažodis: <Slaptažodis, kurį įvedėte čia>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Pakartokite slaptažodį:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Pakartotinai įrašykite administratoriaus slaptažodį"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -832,29 +837,29 @@ msgstr ""
"skaičiai ir \"_\" (pabraukimas). Venkite nelotyniškų raidžių, tarpų bei "
"skyrybos ženklų."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Negalima simbolis duomenų bazės pavadinime!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "Naujas administratoriaus slaptažodis nesutampa su pakartotinu.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Slaptažodžiai nesutampa!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"Administratoriaus slaptažodis kartu su pakartotinu slaptažodžiu yrabūtini"
" norint sukurti naują duomenų bazę."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Neįvestas administratoriaus slaptažodis!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -862,15 +867,15 @@ msgstr ""
"Duomenų bazė tokiu pavadinimu jau yra sukurta.\n"
"Pasirinkite kitą pavadinimą."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Duomenų bazė tokiu pavadinimu jau yra sukurta!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Neteisingas Tryton serverio slaptažodis. Bandykite iš naujo."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -883,7 +888,7 @@ msgstr ""
"papildomos informacijos.\n"
"Klaidos pranešimas:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Klaida kuriant duomenų bazę!"
@@ -931,7 +936,7 @@ msgstr "Naikinti pasirinktą duomenų bazę."
msgid "Choose a Tryton database to delete:"
msgstr "Pasirinkite duomenų bazę, kurią sunaikinti:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Serverio jungtis:"
@@ -1022,15 +1027,15 @@ msgstr "Serveris:"
msgid "User name:"
msgstr "Naudotojas:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Atkurti duomenų bazę"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Atkuriama iš failo:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1043,15 +1048,15 @@ msgstr ""
"Negalima įvesti nelotyniškų raidžių, tarpų bei skyrybos ženklų! Pavyzdys:"
" tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Naujos duomenų bazės pavadinimas:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Atnaujinti duomenų bazę:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1059,11 +1064,11 @@ msgstr ""
"Pažymėkite, jeigu norite, kad po duomenų bazė atkūrimo būtų atnaujinama "
"iki esamos Tryton versijos."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Atkurti"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Atkurti duomenų bazę iš failo."
@@ -1103,154 +1108,158 @@ msgstr "Turinys:"
msgid "Attachment:"
msgstr "Priedas:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Buvęs"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Buvęs įrašas"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Kitas"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Kitas įrašas"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Priedai(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Prisegti failą prie įrašo"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "Sukurti ko_piją"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "_Buvęs"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "_Kitas"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "I_eškoti"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Žiūrėti _žurnalus..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "P_riedas:"
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Veiksmai..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Susiję įrašai..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "_Ataskaita..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "Siųsti _el. paštu..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "_Spausdinti..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Eksportuoti duomenis..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Importuoti duomenis..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Priedai(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Pasirinkite bent vieną įrašą!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Sukūrė naudotojas:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Sukūrimo data:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Paskutinį kartą redagavo:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Paskutinio redagavimo data:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Modelis:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Ar tikrai norite ištrinti šį įrašą?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Ar tikrai norite ištrinti šiuos įrašus?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Įrašai nebuvo ištrinti!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Įrašai ištrinti!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Dabar dirbate su įrašo(-ų) kopija(-omis)!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Įrašas išsaugotas!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Netinkama forma!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " iš "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1258,46 +1267,52 @@ msgstr ""
"Šis įrašas buvo pakeistas\n"
"Ar norite jį išsaugoti?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Veiksmai"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Vykdyti veiksmą"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "Susijęs"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Atverti susijusius įrašus"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Ataskaitos"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Atverti ataskaitą"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Siuntimas"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Siųsti ataskaitą el. paštu"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Spausdinimas"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Spausdinti ataskaitą"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Nežinomas"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Riba"
@@ -1326,6 +1341,20 @@ msgstr "Nustatymai"
msgid "Current Password:"
msgstr "Dabartinis slaptažodis:"
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Buvęs"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Pasirinkimas"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Spartieji klavišai"
@@ -1509,21 +1538,21 @@ msgstr "Pridėti laukų pavadinimus"
msgid "Name"
msgstr "Pavadinimas"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Kokiu pavadinimu išsaugoti šį eksportavimo šabloną?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d įrašas išsaugotas!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d įrašai išsaugoti!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1538,26 +1567,26 @@ msgstr ""
msgid "Link"
msgstr "Nuoroda"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Pridėti"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Šalinti <Del>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Sukurti naują įrašą <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Pašalinti pasirinktą įrašą <Del>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Atkurti pasirinktą įrašą <Ins>"
@@ -1580,10 +1609,10 @@ msgstr "Importuoti iš failo:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Atverti..."
@@ -1607,19 +1636,19 @@ msgstr "Koduotė:"
msgid "Lines to Skip:"
msgstr "Praleisti eilutes:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Lauko pavadinimas"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Pasirinkite failą iš kurio importuosite!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Klaida atveriant CSV failą"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Klaida apdorojant failą ties lauku %s."
@@ -1634,24 +1663,7 @@ msgstr "%d įrašas importuotas!"
msgid "%d records imported!"
msgstr "%d įrašai importuoti!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Importavimo klaida!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Klaida importuojant įrašą %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Vedlys"
@@ -1660,44 +1672,40 @@ msgstr "Vedlys"
msgid "No String Attr."
msgstr "Be pavadinimo"
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
#, fuzzy
msgid "Creation User"
msgstr "Sukūrė naudotojas:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
#, fuzzy
msgid "Creation Date"
msgstr "Sukūrimo data:"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
#, fuzzy
msgid "Modification User"
msgstr "Paskutinio redagavimo data:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
#, fuzzy
msgid "Modification Date"
msgstr "Paskutinio redagavimo data:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
msgid "Unable to set view tree state"
msgstr "Nepavyko nustatyti lokalės %s"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Pasirinkite įrašą, kad galėtumėte naudoti sąryšį!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1705,19 +1713,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "F_iltras"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Rodyti filtrų žymeles"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Šalinti šią žymelę"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Sukurti šio filtro žymelę"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Žymelės pavadinimas:"
@@ -1748,24 +1756,24 @@ msgstr ""
msgid "Select a File..."
msgstr "Pasirinkite failą..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Rodyti paprastą tekstą"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Pridėti reikšmę"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Šalinti \"%s\""
@@ -1782,23 +1790,23 @@ msgstr "Visi failai"
msgid "Images"
msgstr "Paveikslėliai"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Vertimas"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Keisti"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Neaiškus"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Išsaugokite įrašą prieš pridedant vertimą!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Jokia kita kalba nėra prieinama!"
@@ -1811,12 +1819,12 @@ msgstr "Pridėti turimą įrašą"
msgid "Remove selected record <Del>"
msgstr "Pašalinti pasirinktą įrašą <Del>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Atverti įrašą <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Ieškoti įrašo <F2>"
@@ -1908,15 +1916,10 @@ msgstr "PNG paveikslėlis (*.png)"
msgid "Image size too large!"
msgstr "Paveikslėlis yra per didelis!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Nežinomas"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Vertimų peržiūra"
diff --git a/share/locale/nl_NL/LC_MESSAGES/tryton.mo b/share/locale/nl_NL/LC_MESSAGES/tryton.mo
index 46847cf..edd81bc 100644
Binary files a/share/locale/nl_NL/LC_MESSAGES/tryton.mo and b/share/locale/nl_NL/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/nl_NL/LC_MESSAGES/tryton.po b/share/locale/nl_NL/LC_MESSAGES/tryton.po
index 98a1cfb..e726389 100644
--- a/share/locale/nl_NL/LC_MESSAGES/tryton.po
+++ b/share/locale/nl_NL/LC_MESSAGES/tryton.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Tryton 1.8\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2012-04-23 11:07+0200\n"
"Last-Translator: Bram van der Sar <avdsar at telfort.nl>\n"
"Language-Team: \n"
@@ -60,62 +60,62 @@ msgstr "Kan configuratiebestand %s niet opslaan! "
msgid "Unable to set locale %s"
msgstr "Kan omgeving %s niet instellen"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Selecteer je handeling."
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Geen handeling gedefinieerd!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton verbinding"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Server:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Poort:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Selectie"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Uw selectie:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Opslaan als..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Altijd deze waarschuwing negeren."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr ""
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Bevestiging"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Simultaan gebruik"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
#, fuzzy
msgid ""
"<b>Write Concurrency Warning:</b>\n"
@@ -134,50 +134,50 @@ msgstr ""
" - \"Vergelijk\" om de verschillen te vergelijken;\n"
" - \"Toch opslaan\" om deze versie op te slaan. "
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Vergelijk"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Overschrijven"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Fout"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Programmafout melden"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Programmafout"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Fout: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, fuzzy, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Om programmafouten aan te melden moet je een account hebben bij <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Foutrapportage"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Gebruiker:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Wachtwoord:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -186,11 +186,11 @@ msgstr ""
"Om je op de hoogte te houden is je gebuikersnaam toegevoegd aan de lijst "
"van belangstellenden"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Nieuwe foutmelding gemaakt met ID "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -198,11 +198,11 @@ msgstr ""
"Geen verbinding!\n"
"Verkeerde gebruikersnaam of wachtwoord!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Uitzondering:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -213,12 +213,12 @@ msgstr ""
"Het programma maakt geen verbinding meer met de server totdat de "
"identificatiecode is hersteld."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Beveiligingsrisico!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -226,39 +226,39 @@ msgstr ""
"Verbinding mislukt!\n"
"Verbinden met de server niet mogelijk!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Netwerkfout."
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr " J"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "w"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr " d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "u"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr ""
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr ""
@@ -267,273 +267,278 @@ msgstr ""
msgid "Open the calendar <F2>"
msgstr "Open de kalender"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Datum selecteren"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
#, fuzzy
msgid "yes"
msgstr "bytes"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
#, fuzzy
msgid "true"
msgstr "Waar"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Waar"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Niet waar"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Afsluiten"
+
+#: tryton/common/popup_menu.py:77
#, fuzzy
msgid "Attachments..."
msgstr "Bijlage:"
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
#, fuzzy
msgid "Actions..."
msgstr "_Acties.."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
#, fuzzy
msgid "Relate..."
msgstr "Verwijderen... "
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
#, fuzzy
msgid "Report..."
msgstr "_Importeer gegevens... "
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
#, fuzzy
msgid "E-Mail..."
msgstr "E-mail"
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
#, fuzzy
msgid "Print..."
msgstr "Afdrukken"
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Bestand"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Gebruiker"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Opties"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr ""
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "_Help"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Zoeken"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr ""
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Verbinden..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "Verbinding verbreken"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "Data_base"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nieuwe database..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Herstel database..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Reservekopie van database..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Verwijder database..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "Afsluiten"
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Voorkeuren..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
#, fuzzy
msgid "_Menu Reload"
msgstr "He_rladen"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr ""
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr ""
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "_Werkbalk"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "_Standaard"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "_Tekst en pictogrammen"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "Pictogrammen..."
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Tekst"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "_Menubalk"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Versnellers aanpassen"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Modus"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Normaal"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "Formulier"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Bewaar breedte/hoogte"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr ""
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Spellingscontrole uitvoeren"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Positie tabbladeren"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Bovenkant"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Links"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Rechts"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Onderkant"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
#, fuzzy
msgid "_Previous Tab"
msgstr "V_orige"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr ""
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Zoek limiet..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "E-mail"
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Sla opties op"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "_Tips..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "Sneltoetsen"
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "I_nfo..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr ""
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
msgstr ""
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Tabblad sluiten"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -541,7 +546,7 @@ msgstr ""
"U gaat een Tryton database verwijderen.\n"
"Weet u zeker dat u door wil gaan?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -549,28 +554,28 @@ msgstr ""
"Verkeerde wachtwoord voor de Tryton server\n"
"Probeer het opnieuw."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Geen toegang!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "Verwijderen database is mislukt met foutmelding:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Database kan niet worden verwijderd."
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "Database succesvol verwijderd!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Open reservekopie om te herstellen..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -578,11 +583,11 @@ msgstr ""
"Een met een wachtwoord beveiligde database kan niet terug gezet worden.\n"
"Voer deze handeling handmatig uit."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "Database beveiligd met een wachtwoord!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -590,19 +595,19 @@ msgstr ""
"Verkeerde wachtwoord voor de Tryton server\n"
"Probeer het opnieuw."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "Herstellen database is mislukt met foutmelding:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Database terugzetten mislukt!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "Database succesvol teruggezet!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -610,75 +615,75 @@ msgstr ""
"Een met een wachtwoord beveiligde database kan niet verwijderd worden.\n"
"Voer deze handeling handmatig uit."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Verwijderen database is mislukt met foutmelding:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Database verwijderen mislukt!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "Reservekopie van database gemaakt!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr ""
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Maak een nieuw item"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Opslaan"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Bewaar dit item"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Omschakelen"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Wijzig beeld"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "He_rladen"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Herladen"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nieuw"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "Op_slaan"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Wijzig beeld"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "_Ongedaan maken"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "Verwijderen... "
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "Tabblad sluiten"
@@ -715,28 +720,28 @@ msgstr ""
"geblokkeerd worden.\n"
"Klik op 'Wijzig' om het adres aan te passen."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Maak een nieuwe Database."
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "Aan_maken"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Maak de nieuwe Database."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Server instelling:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Server verbinding:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
#, fuzzy
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
@@ -747,22 +752,22 @@ msgstr ""
"als de server op deze computer is geïnstalleerd. Klik op 'Wijzig' om het "
"adres aan te passen."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "_Wijzigen"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Verbinden met server..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Wachtwoord Tryton server:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -771,15 +776,15 @@ msgstr ""
"van een gebruiker. Dit wachtwoord is doorgaans gedefinieerd in de trytond"
" configuratie."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Maak een nieuwe database:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Naam database:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -790,11 +795,11 @@ msgstr ""
"Toegestane tekens zijn alfa-numeriek of _ (underscore).\n"
"Vermijd alle accenten, spaties en speciale tekens! Voorbeeld: tryton."
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Standaardtaal:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -803,11 +808,11 @@ msgstr ""
"Kies de standaardtaal welke geïnstalleerd wordt voor deze database. Het "
"is mogelijk de taal te wijzigen na installatie in het Systeembeheer menu."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Admin wachtwoord:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -819,15 +824,15 @@ msgstr ""
"Gebruikersnaam: admin\n"
"Wachtwoord: <het wachtwoord dat je hier ingeeft>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Bevestig admin wachtwoord:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Admin wachtwoord opnieuw invoeren"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -836,29 +841,29 @@ msgstr ""
"(underscore). Vermijd alle accenten, spaties en andere bijzondere "
"karakters."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Ongeldige tekens in database naam!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "Het nieuwe wachtwoord voor admin komt niet overeen met de bevestiging.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Wachtwoorden komen niet overeen!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"Admin wachtwoord en bevestiging zijn nodig om een nieuwe database te "
"maken."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Wachtwoord admin ontbreekt!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -866,15 +871,15 @@ msgstr ""
"Een database met deze naam bestaat al.\n"
"Probeer een andere database naam. "
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Deze database bestaat al!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Sorry, verkeerde wachtwoord voor de Tryton server. Probeer het opnieuw. "
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -887,7 +892,7 @@ msgstr ""
"informatie.\n"
"Foutmelding:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Database maken mislukt!"
@@ -937,7 +942,7 @@ msgstr "Verwijder de gekozen database."
msgid "Choose a Tryton database to delete:"
msgstr "Kies een Tryton database om te verwijderen:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Verbinding met server:"
@@ -1035,15 +1040,15 @@ msgstr "Poort:"
msgid "User name:"
msgstr "Gebruikersnaam:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Database terug zetten"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Terug te zetten bestand:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1055,15 +1060,15 @@ msgstr ""
"Vermijd alle accenten, spaties en speciale tekens!\n"
"Voorbeeld: tryton "
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Naam nieuwe database:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Database bijwerken:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1071,11 +1076,11 @@ msgstr ""
"Inschakelen voor het automatisch bijwerken van de database uit een vorige"
" Tryton versie."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Herstellen"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Herstel database uit bestand."
@@ -1115,159 +1120,163 @@ msgstr "Bericht:"
msgid "Attachment:"
msgstr "Bijlage:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Vorige"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Vorige item"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Volgende"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Volgende item"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Bijlage"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Voeg een bijlage aan dit item toe"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Dupliceren"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "V_orige"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "_Volgende"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
#, fuzzy
msgid "_Search"
msgstr "Zoeken"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Bekijk logregister"
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
#, fuzzy
msgid "A_ttachments..."
msgstr "Bijlage:"
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Acties.."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
#, fuzzy
msgid "_Relate..."
msgstr "Verwijderen... "
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
#, fuzzy
msgid "_Report..."
msgstr "_Importeer gegevens... "
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
#, fuzzy
msgid "_E-Mail..."
msgstr "E-mail"
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "Afdrukken"
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "_Exporteer gegevens... "
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "_Importeer gegevens... "
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Bijlage (%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Je moet één item selecteren!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Aangemaakt door:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Aanmaakdatum"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Laatste wijziging door:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Laatste wijzigingsdatum:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Model:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Weet je zeker dat je dit item wilt verwijderen?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Weet je zeker dat je deze items wilt verwijderen?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Items niet verwijderd!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Items verwijderd!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Je werkt nu met het gekopieerde item!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Item opgeslagen!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Ongeldige invoer in formulier!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " van "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1275,51 +1284,57 @@ msgstr ""
"Item is aangepast.\n"
"Wil je de wijzigingen opslaan?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Actie"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr ""
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
#, fuzzy
msgid "Relate"
msgstr "Aan_maken"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
#, fuzzy
msgid "Open related records"
msgstr "Item openen"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
#, fuzzy
msgid "Report"
msgstr "Rapporten"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
#, fuzzy
msgid "Open report"
msgstr "Item openen"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
#, fuzzy
msgid "E-Mail"
msgstr "E-mail"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr ""
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Afdrukken"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr ""
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Onbekend"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Limiet:"
@@ -1348,6 +1363,20 @@ msgstr "Voorkeur"
msgid "Current Password:"
msgstr "Huidig Wachtwoord:"
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Vorige"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Selectie"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Sneltoetsen"
@@ -1533,21 +1562,21 @@ msgstr "Voeg veldnamen toe"
msgid "Name"
msgstr "Naam"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Wat is de naam voor deze export?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d item opgeslagen!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d items opgeslagen!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1562,28 +1591,28 @@ msgstr ""
msgid "Link"
msgstr "Koppeling"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Toevoegen"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr ""
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
#, fuzzy
msgid "Create a new record <F3>"
msgstr "Maak een nieuw item"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
#, fuzzy
msgid "Delete selected record <Del>"
msgstr "Geselecteerd item verwijderen"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
#, fuzzy
msgid "Undelete selected record <Ins>"
@@ -1607,10 +1636,10 @@ msgstr "Bestand om te importeren:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Openen..."
@@ -1635,19 +1664,19 @@ msgstr "Codering:"
msgid "Lines to Skip:"
msgstr "Regels overslaan:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Veldnaam"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "U moet eerst een import bestand selecteren!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Fout bij openen CSV-bestand"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, fuzzy, python-format
msgid "Error processing the file at field %s."
msgstr "Fout bij inlezen van bestand bij veld%s"
@@ -1662,20 +1691,7 @@ msgstr "%d item geïmporteerd!"
msgid "%d records imported!"
msgstr "%d items geïmporteerd!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Fout bij importeren!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Assistent"
@@ -1684,45 +1700,41 @@ msgstr "Assistent"
msgid "No String Attr."
msgstr "Lege opdracht"
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
#, fuzzy
msgid "ID"
msgstr " d"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
#, fuzzy
msgid "Creation User"
msgstr "Aangemaakt door:"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
#, fuzzy
msgid "Creation Date"
msgstr "Aanmaakdatum"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
#, fuzzy
msgid "Modification User"
msgstr "Laatste wijzigingsdatum:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
#, fuzzy
msgid "Modification Date"
msgstr "Laatste wijzigingsdatum:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
msgid "Unable to set view tree state"
msgstr "Kan omgeving %s niet instellen"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Eerst een regel selecteren voordat deze optie gebruikt kan worden!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ""
@@ -1731,19 +1743,19 @@ msgstr ""
msgid "F_ilters"
msgstr "_Bestand"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr ""
@@ -1775,24 +1787,24 @@ msgstr ""
msgid "Select a File..."
msgstr "Kies een bestand"
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr ""
@@ -1810,24 +1822,24 @@ msgstr "Alle bestanden"
msgid "Images"
msgstr "Afbeeldingen"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
#, fuzzy
msgid "Translation"
msgstr "Voeg vertaling toe"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Gegevens eerst opslaan voordat u een vertaling toevoegt! "
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Geen andere taal beschikbaar!"
@@ -1842,13 +1854,13 @@ msgstr "Bewaar dit item"
msgid "Remove selected record <Del>"
msgstr "Geselecteerd item verwijderen"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
#, fuzzy
msgid "Open a record <F2>"
msgstr "Item openen"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
#, fuzzy
msgid "Search a record <F2>"
msgstr "Item zoeken"
@@ -1943,15 +1955,10 @@ msgstr "PNG afbeelding (*.png)"
msgid "Image size too large!"
msgstr "Afbeelding te groot!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ":"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Onbekend"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Vertaal aanzicht"
diff --git a/share/locale/ru_RU/LC_MESSAGES/tryton.mo b/share/locale/ru_RU/LC_MESSAGES/tryton.mo
index f8d6f02..528c04b 100644
Binary files a/share/locale/ru_RU/LC_MESSAGES/tryton.mo and b/share/locale/ru_RU/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ru_RU/LC_MESSAGES/tryton.po b/share/locale/ru_RU/LC_MESSAGES/tryton.po
index 95e19e6..42f18b1 100644
--- a/share/locale/ru_RU/LC_MESSAGES/tryton.po
+++ b/share/locale/ru_RU/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 1.3.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: 2013-04-12 23:16+0500\n"
"Last-Translator: Ilya Melnikov <rayanayar at mail.ru>\n"
"Language-Team: ru_RU <k-dmitry2 at narod.ru>\n"
@@ -65,62 +65,62 @@ msgstr "Невозможно записать файл конфигурации
msgid "Unable to set locale %s"
msgstr "Не удается установить локализацию %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Выберите действие"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Не определены действия!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton соединение"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Сервер:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Порт:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Выбор"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Ваш выбор:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Сохранить как..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Всегда игнорировать это предупреждение."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "Вы хотите продолжить?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Подтвердите"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Прерывание конкурентных записей"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -138,50 +138,50 @@ msgstr ""
"- \" Сравнить \", чтобы увидеть модифицированный вариант;\n"
"- \" Переписать \", чтобы сохранить вашу текущую версию."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Сравнить"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Записать все равно"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Ошибка"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Сообщить об ошибке"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Ошибка приложения!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Ошибка: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Вы можете отправить отчет об ошибке если вы зарегистрированны на <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Система сбора ошибок"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Пользователь:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Пароль:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
"Чтобы держать вас в курсе ваше имя пользователя будет добавлен в список "
"перечень по этому вопросу"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Создан новый отчет об ошибке с идентификатором"
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
"Ошибка соединения!\n"
"Неверное имя пользователя или пароль!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Исключительная ситуация:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
"Подключение к серверу приостановлено до тех пор пока сертификат не будет "
"исправлен."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Угроза безопасности!"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
"Ошибка соединения!\n"
"Невозможно соединиться с сервером!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Сетевая ошибка!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "Г"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "М"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "н"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "д"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "ч"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "м"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Поиск...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Создать...</i>"
@@ -269,254 +269,259 @@ msgstr "<i>Создать...</i>"
msgid "Open the calendar <F2>"
msgstr "Открыть календарь <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Выбор даты"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "да"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr "истинный"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr "Истинный"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr "Ложный"
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "_Выход..."
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Вложения..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "Действия..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "Связанные..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Отчет..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "Эл.почта..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "Печать..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "Файл"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Пользователь"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Параметры"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "Избранное"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "Помощь"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Поиск"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "Ничего не найдено."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "Подключение..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "Отключение"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "База данных"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "Новая база данных..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "Восстановить базу данных..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Сохранить базу данных..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "Удалить базу данных..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Выход..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "Настройки..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "Обновить меню"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "Показать/скрыть меню"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "Глобальный поиск"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "Панель инструментов"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "По умолчанию"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Текст и Значки"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "Значки"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "Текст"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "_Меню"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Режим изменения быстрых клавиш"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "Режим"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "Нормальный"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "Упрощенный"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "Форма"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Сохранить размеры"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
#, fuzzy
msgid "Save Tree State"
msgstr "Запомнить состояние дерева"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Проверка орфографии"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Положение вкладок"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Вверху"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Влево"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "В право"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Снизу"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "Предыдущая вкладка"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "Следующая вкладка"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Максимальное количество строк..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "Настройки _Эл.почты"
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "Сохранить настройки"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "_Советы..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "_Быстрые клавиши"
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "О программе"
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "Управление закладками"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -524,11 +529,11 @@ msgstr ""
"Данное действие приведет к закрытию всех вкладок.\n"
"Продолжить?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Закрыть вкладку"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -536,7 +541,7 @@ msgstr ""
"Вы собираетесь удалить базу данных.\n"
"Вы действительно уверены, продолжить?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -544,28 +549,28 @@ msgstr ""
"Неверный административный пароль сервера Tryton\n"
"Пожалуйста, попробуйте снова"
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Доступ запрещен!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "Удаление базы данных завершено с сообщением об ошибке:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Не удалось удалить базу данных!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "База успешно удалена!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Открыть файл для восстановления..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -573,11 +578,11 @@ msgstr ""
"Не возможно восстановить на защищенной паролем базе данных.\n"
"Резервное копирование и восстановление необходимо выполнить вручную."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "База данных защищена паролем!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -585,19 +590,19 @@ msgstr ""
"Неверный административный пароль сервера Tryton\n"
"Пожалуйста, попробуйте снова"
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "Восстановление базы данных с сообщением об ошибке:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Базу данных восстановить не удалось!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "База данных восстановлена полностью!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -605,75 +610,75 @@ msgstr ""
"Не возможно сделать снимок на защищенной паролем базе данных. \n"
"Резервное копирование и восстановление необходимо выполнить вручную."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Резервное копирование базы данных завершилось с сообщением об ошибке:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Не удалось выполнить резервное копирование базы данных!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "База данных сохранена успешно!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Новый"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Создать новую запись"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Сохранить"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Сохранить эту запись"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Переключить"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Переключить вид"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Обновить"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Обновить"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "Новый"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "Сохранить"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Сменить просмотр"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "Обновить/Отменить"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "Удалить..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "Закрыть вкладку"
@@ -708,28 +713,28 @@ msgstr ""
"Нажмите на 'Изменить' для изменения адреса.\n"
"4. Если это не помогло обратитесь к администратору вашей сети."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Создать новую базу данных"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "С_оздать"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Создать новую базу данных"
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Параметры подключения к серверу:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Соединение с сервером:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -739,22 +744,22 @@ msgstr ""
"если сервер установлен на этом компьютере. Нажмите кнопку 'Изменить' для "
"изменения адреса."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "Изменить"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Настройка соединения с сервером"
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Пароль сервера Tryton:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -762,15 +767,15 @@ msgstr ""
"Это пароль для сервера Tryton. Он не относится к реальному пользователю. "
"Этот пароль обычно определяется в серверной конфигурации."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Параметры новой базы данных:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Имя базы данных:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -782,11 +787,11 @@ msgstr ""
"Недопустимо использование пробелов и других специальных символов!\n"
"Примеры: Tryton, test_1, MyCompany"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Язык по умолчанию:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -796,11 +801,11 @@ msgstr ""
"данных. Вы сможете установить новые языки после установки через "
"административное меню."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Пароль администратора:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -812,15 +817,15 @@ msgstr ""
"Имя пользователя: Admin\n"
"Пароль: <пароль вы установите здесь>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Подтвердите пароль администратора:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Введите административный пароль повторно"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -829,27 +834,27 @@ msgstr ""
"(Подчеркивание). Недопустимо использование пробелов и других специальных "
"символов."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Недопустимые символы в имени базы данных!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "Новый пароль не совпадает с полем подтверждения.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Пароли не совпадают!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr "Пароль администратора необходим для создания новой базы данных."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Отсутствует административный пароль!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -857,15 +862,15 @@ msgstr ""
"База данных с таким же названием уже существует.\n"
"Попробуйте другое имя базы данных."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "Такая база данных уже существует!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Извините, неверный пароль для сервера. Попробуйте еще раз."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -877,7 +882,7 @@ msgstr ""
"данных! Дополнительная информация может быть в сообщении об ошибке.\n"
"Сообщение об ошибке:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Ошибка создания базы данных!"
@@ -925,7 +930,7 @@ msgstr "Удалить выбранную базу данных"
msgid "Choose a Tryton database to delete:"
msgstr "Выберите базу данных для удаления:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Соединение с сервером:"
@@ -1016,15 +1021,15 @@ msgstr "Сервер:порт"
msgid "User name:"
msgstr "Имя пользователя:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Восстановить базу данных"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Файл для восстановления:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1036,15 +1041,15 @@ msgstr ""
"Недопустимо использование пробелов и других специальных символов!\n"
"Примеры: Tryton, test_1, MyCompany"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Название новой базы данных:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Обновить базу данных:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1052,11 +1057,11 @@ msgstr ""
"Проверить наличие автоматического обновления базы данных после "
"восстановления базы данных из предыдущей версии Tryton."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Восстановить"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Восстановить базу данных из файла."
@@ -1096,154 +1101,158 @@ msgstr "Сообщение:"
msgid "Attachment:"
msgstr "Вложение:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Предыдущий"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Предыдущая запись"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Следующий"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Следующая запись"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Вложений (0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Добавить вложение для этой записи"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "Копировать"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "Предыдущая"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Следующая"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "Поиск"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Просмотр изменений"
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "Вложения..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "Действия"
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "Связанные..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "Отчет..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "Эл.почта..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "печать"
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "Экспорт данных"
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "Импорт данных"
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Вложений (%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Вы должны выбрать одну запись!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "Номер строки"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Создано пользователем"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Дата создания"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Изменена пользователем:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Дата изменения:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Модель:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Вы уверены что хотите удалить эту запись?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Вы уверены что хотите удалить эти записи?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Записи не удалены!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Записи удалены!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Сейчас работает на дублирующихся записях!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Запись сохранена!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Недопустимая форма!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr "из"
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1251,46 +1260,52 @@ msgstr ""
"Эта запись была изменена\n"
"Вы хотите её сохранить?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Действие"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Выполнить действие"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "Связанные"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Открыть связанные записи"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Отчет"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Открыть отчет"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Эл.почта"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Отправить отчет по Эл.почте"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Печать"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Печать отчета"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Неизвестно"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Ограничение"
@@ -1319,6 +1334,20 @@ msgstr "Настройка"
msgid "Current Password:"
msgstr "Текущий пароль:"
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Предыдущий"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Выбор"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Сочетания клавиш быстрого доступа"
@@ -1499,21 +1528,21 @@ msgstr "Добавить имя поля"
msgid "Name"
msgstr "Имя"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Укажите имя для экспорта."
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d запись сохранена!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d записей сохранено!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1528,26 +1557,26 @@ msgstr ""
msgid "Link"
msgstr "Ссылка"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Добавить"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Удалить <Del>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Создать новую запись <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Удалить выбраную запись <Del>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Восстановить выбраную запись <Ins>"
@@ -1570,10 +1599,10 @@ msgstr "Файл для импорта:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Открыть..."
@@ -1597,19 +1626,19 @@ msgstr "Кодировка:"
msgid "Lines to Skip:"
msgstr "Строки для пропуска:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Наименование поля"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Вы должны сначала выбрать файл для импорта!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Ошибка открытия файла CSV"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Ошибка при обработке файла на поле %s."
@@ -1624,24 +1653,7 @@ msgstr "%d запись импортирована!"
msgid "%d records imported!"
msgstr "%d записей импортировано!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Ошибка при импорте!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Ошибка импорта записи %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Мастер"
@@ -1650,44 +1662,40 @@ msgstr "Мастер"
msgid "No String Attr."
msgstr "Нет строковых атрибутов"
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
#, fuzzy
msgid "Creation User"
msgstr "Создано пользователем"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
#, fuzzy
msgid "Creation Date"
msgstr "Дата создания"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
#, fuzzy
msgid "Modification User"
msgstr "Дата изменения:"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
#, fuzzy
msgid "Modification Date"
msgstr "Дата изменения:"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
msgid "Unable to set view tree state"
msgstr "Не удается установить локализацию %s"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Необходимо выбрать запись для использования Отношения!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1695,19 +1703,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "Фильтры"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Показать сохраненные фильтры"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Удалить эту закладку"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Запомнить этот фильтр"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Имя закладки:"
@@ -1738,24 +1746,24 @@ msgstr ""
msgid "Select a File..."
msgstr "Выбрать файл..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Показать в виде текста"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Добавить значение"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Удалить \"%s\""
@@ -1772,23 +1780,23 @@ msgstr "Все фалы"
msgid "Images"
msgstr "Изображения"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Перевод"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Редактировать"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Неточный"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Необходимо сохранить запись перед добавлением перевода!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Отсутствуют другие доступные языки!"
@@ -1801,12 +1809,12 @@ msgstr "Добавить существующую запись"
msgid "Remove selected record <Del>"
msgstr "Удалить выбраную запись <Del>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Открыть запись <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Поиск записи <F2>"
@@ -1898,15 +1906,10 @@ msgstr "PNG изображение (*.png)"
msgid "Image size too large!"
msgstr "Размер изображения слишком большой!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Неизвестно"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Перевод текущего окна"
diff --git a/share/locale/sl_SI/LC_MESSAGES/tryton.mo b/share/locale/sl_SI/LC_MESSAGES/tryton.mo
index 672db11..06bef10 100644
Binary files a/share/locale/sl_SI/LC_MESSAGES/tryton.mo and b/share/locale/sl_SI/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/sl_SI/LC_MESSAGES/tryton.po b/share/locale/sl_SI/LC_MESSAGES/tryton.po
index b3f84f2..29fa4e8 100644
--- a/share/locale/sl_SI/LC_MESSAGES/tryton.po
+++ b/share/locale/sl_SI/LC_MESSAGES/tryton.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: tryton 3.0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-17 11:35+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-03-22 17:10+0100\n"
"Last-Translator: Venceslav Vezjak <vezjakv at gmail.com>\n"
"Language-Team: sl_SI <LL at li.org>\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 "
@@ -65,62 +65,62 @@ msgstr "Ni možno zapisati konfiguracijske datoteke %s!"
msgid "Unable to set locale %s"
msgstr "Ni možno nastaviti krajevnih nastavitev %s"
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr "Izberi ukrep"
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr "Nobenega ukrepa ni določenega!"
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr "Tryton povezava"
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr "Strežnik:"
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr "Vrata:"
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr "Izbira"
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr "Vaša izbira:"
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr "Shrani kot..."
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr "Vedno prezri to opozorilo."
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr "Ali želite nadaljevati?"
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr "Potrditev"
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr "Izjema sočasnega izvajanja"
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -138,50 +138,50 @@ msgstr ""
" - \"Primerjaj\" za vpogled v spremenjeno inačico;\n"
" - \"Vseeno zapiši\" za shranitev vaše trenutne inačice."
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr "Primerjaj"
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr "Vseeno zapiši"
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr "Napaka"
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr "Prijava programske napake"
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr "Napaka programa!"
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr "Napaka: "
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr "Za prijavo programskih napak morate imeti odprt račun pri <u>%s</u>"
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr "Sledilnik programskih napak"
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr "Uporabnik:"
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr "Geslo:"
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
"Zaradi obveščanja je vaše uporabniško ime dodano na seznam te programske "
"napake"
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr "Evidentirana je nova programska napaka z ID "
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
"Napaka pri povezavovanju!\n"
"Napačno uporabniško ime ali geslo!"
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr "Izjema:"
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
"Program bo ustavil povezovanje na ta strežnik, dokler ne bo njegov prstni"
" odtis popravljen."
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr "Varnostno tveganje"
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
"Napaka pri povezovanju!\n"
"Ni se možno povezati na strežnik!"
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr "Napaka mreže!"
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr "l"
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr "M"
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr "t"
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr "d"
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr "u"
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr "m"
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr "<i>Išči...</i>"
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr "<i>Ustvari...</i>"
@@ -269,253 +269,257 @@ msgstr "<i>Ustvari...</i>"
msgid "Open the calendar <F2>"
msgstr "Odpri koledar <F2>"
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr "Izbira datuma"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr "d"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr "da"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
-msgstr "resnično"
+msgstr "da"
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr "t"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
-msgstr "Resnično"
+msgstr "Da"
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
-msgstr "Neresnično"
+msgstr "Ne"
+
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Uredi ..."
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr "Priponke..."
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr "_Ukrepi..."
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr "_Veze..."
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr "Poročila..."
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr "_Elektronska pošta..."
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr "_Izpis..."
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr "_Datoteka"
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr "_Uporabnik"
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr "_Možnosti"
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr "P_riljubljeno"
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr "_Pomoč"
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr "Išči"
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr "Brez rezultatov."
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr "_Poveži..."
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr "Pre_kini povezavo"
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr "Podatkovna _baza"
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr "_Nova podatkovna baza ..."
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr "_Obnovitev podatkovne baze ..."
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr "Varnostno _kopiranje podatkovne baze ..."
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr "_Brisanje podatkovne baze ..."
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr "_Izhod..."
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr "_Nastavitve..."
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr "_Ponovno naloži meni"
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr "_Preklopi meni"
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr "_Globalno iskanje"
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr "_Orodna vrstica"
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr "_Privzeto"
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr "Bese_dilo in ikone"
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr "_Ikone"
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr "_Besedilo"
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr "_Menu vrstica"
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr "Spremeni bližnjice"
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr "_Način"
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr "_Navaden"
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr "_PDA"
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr "O_brazec"
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr "Shrani širino/višino"
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr "Shrani stanje drevesa"
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr "Črkovanje"
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr "Položaj zavihkov"
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr "Zgoraj"
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr "Levo"
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr "Desno"
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr "Spodaj"
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr "P_rejšnji zavihek"
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr "_Naslednji zavihek"
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr "Omejitev iskanja..."
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr "_Epošta..."
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr "_Shrani možnosti"
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr "_Nasveti..."
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr "_Bližnjice na tipkovnici..."
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr "_Vizitka..."
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr "_Upravljaj zaznamke"
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
@@ -523,11 +527,11 @@ msgstr ""
"Za naslednji ukrep morajo biti vsi zavihki zaprti.\n"
"Ali želite nadaljevati?"
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr "Zapri zavihek"
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
@@ -535,7 +539,7 @@ msgstr ""
"Nameravate izbrisati Tryton podatkovno bazo.\n"
"Ali ste res želite nadaljevati?"
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
@@ -543,28 +547,28 @@ msgstr ""
"Napačno geslo za Tryton strežnik.\n"
"Prosimo, poskusite še enkrat."
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr "Dostop zavrnjen!"
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr "Brisanje podatkovne baze je odpovedalo z napako:\n"
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr "Brisanje podatkovne baze je odpovedalo!"
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr "Brisanje podatkovne baze uspešno zaključeno!"
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr "Odpri varnostno kopijo za obnovitev..."
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
@@ -572,11 +576,11 @@ msgstr ""
"Ni možno obnoviti podatkovne baze, ki so zaščitene z geslom.\n"
"Varnostno kopiranje in obnovitev se mora ročno izvesti."
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr "Podatkovna baza je zaščitena z geslom!"
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
@@ -584,19 +588,19 @@ msgstr ""
"Napačno geslo za Tryton strežnik.\n"
"Prosimo, poskusite še enkrat."
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr "Obnovitev podatkovne baze je odpovedala z napako:\n"
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr "Obnovitev podatkovne baze je odpovedala!"
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr "Obnovitev podatkovne baze uspešno zaključena!"
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
@@ -604,75 +608,75 @@ msgstr ""
"Ni možno zapisati podatkovne baze, ki je zaščitena z geslom.\n"
"Varnostno kopiranje in obnovitev se mora ročno izvesti."
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr "Zapisovanje podatkovne baze je odpovedalo z napako:\n"
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr "Zapisovanje podatkovne baze odpovedalo!"
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr "Varnostno kopiranje podatkovne baze uspešno zaključeno!"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr "Novo"
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr "Ustvari nov zapis"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr "Shrani"
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr "Shrani ta zapis"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr "Preklopi"
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr "Preklopi pogled"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr "_Ponovno naloži"
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr "Ponovno naloži"
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr "_Nov"
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr "_Shrani"
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr "Preklopi po_gled"
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr "Ponovno naloži/Razvel_javi"
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr "Z_briši..."
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr "Zapri zavi_hek"
@@ -706,28 +710,28 @@ msgstr ""
"naslov in vrata (ponavadi 8000) strežnika nista blokirana.\n"
"Za spremembo naslova klikni na 'Spremeni'."
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr "Ustvari novo podatkovno bazo"
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr "_Ustvari"
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr "Ustvari novo podatkovno bazo."
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr "Nastavitev strežnika:"
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr "Povezava do strežnika:"
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
@@ -737,22 +741,22 @@ msgstr ""
"uporabi strežnik 'localhost' in vrata '8000'. Za spremembo naslova klikni"
" na 'Spremeni'."
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr "_Spremeni"
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr "Nastavi povezavo s strežnikom..."
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr "Geslo za Tryton strežnik:"
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
@@ -760,15 +764,15 @@ msgstr ""
"To je geslo Tryton strežnika in ni povezano s pravim uporabnikom. To "
"geslo je ponavadi določeno v trytond konfiguraciji."
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr "Namestitev nove podatkovne baze:"
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr "Ime podatkovne baze:"
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -780,11 +784,11 @@ msgstr ""
"Izogibaj se vsem znakom za naglaševanje, presledku ali posebnim znakom! "
"Primer: tryton"
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr "Privzet jezik:"
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
@@ -793,11 +797,11 @@ msgstr ""
"Izberi privzet jezik, ki bo nameščen za to podatkovno bazo. Po namestitvi"
" lahko nove jezike dodate preko skrbniškega menija."
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr "Skrbniško geslo:"
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -809,15 +813,15 @@ msgstr ""
"Uporabniško ime: admin\n"
"Geslo: <tu nastavljeno geslo>"
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr "Potrdi skrbniško geslo:"
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr "Ponovno vtipkaj skrbniško geslo"
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
@@ -826,29 +830,29 @@ msgstr ""
"(podčrtaj). Izogibaj se vsem znakom za naglaševanje, presledku ali drugim"
" posebnim znakom."
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr "Nedovoljeni znaki v imenu podatkovne baze!"
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr "Novo skrbniško geslo se ne ujema s tistim v potrditvenem polju.\n"
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr "Gesli se ne ujemata!"
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
"Skrbniško geslo in potrditev gesla sta potrebna za izdelavo podatkovne "
"baze."
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr "Manjka skrbniško geslo!"
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
@@ -856,15 +860,15 @@ msgstr ""
"Podatkovna baza s tem imenom že obstaja.\n"
"Poskusi z drugim imenom."
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr "To ime podatkovne baze že obstaja!"
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr "Žal napačno geslo za Tryton strežnik. Prosim, poskusi znova."
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -876,7 +880,7 @@ msgstr ""
"zbrišete! Prosimo, preveri sporočilo napake za dodatne informacije.\n"
"Sporočilo napake:\n"
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr "Napaka pri izdelavi podatkovne baze!"
@@ -924,7 +928,7 @@ msgstr "Zbriši izbrano podatkovno bazo."
msgid "Choose a Tryton database to delete:"
msgstr "Za brisanje izberi Tryton podatkovno bazo:"
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr "Povezava do strežnika:"
@@ -1015,15 +1019,15 @@ msgstr "Strežnik:"
msgid "User name:"
msgstr "Uporabnik:"
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr "Obnovitev podatkovne baze"
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr "Datoteka za obnovitev:"
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1036,15 +1040,15 @@ msgstr ""
"znakom.\n"
"Primer: tryton"
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr "Novo ime podatkovne baze:"
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr "Posodobitev podatkovne baze:"
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
@@ -1052,11 +1056,11 @@ msgstr ""
"Po obnovitvi podatkovne baze iz prejšnje Tryton inačice preveri samodejno"
" posodabljanje podatkovne baze."
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr "Obnovi"
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr "Obnovitev podatkovne baze iz datoteke."
@@ -1096,154 +1100,158 @@ msgstr "Vsebina:"
msgid "Attachment:"
msgstr "Priponka:"
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr "Prejšnji"
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr "Prejšnji zapis"
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr "Naslednji"
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr "Naslednji zapis"
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr "Priponka(0)"
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr "Dodaj priponko zapisu"
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr "_Podvoji"
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr "P_rejšnji"
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr "Nas_lednji"
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr "_Išči"
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr "Poglej dnevni_k..."
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Prikaži različice ..."
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr "P_riponke..."
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr "_Ukrepi..."
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr "_Veze..."
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr "P_oročila..."
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr "_Elektronska pošta..."
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr "_Tiskaj..."
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr "I_zvozi podatke..."
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr "Uv_ozi podatke..."
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr "Priponka(%d)"
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr "Izbrati moraš zapis!"
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr "ID:"
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr "Ustvaril:"
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr "Ustvarjeno:"
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr "Nazadnje popravil:"
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr "Nazadnje popravljeno:"
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr "Model:"
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr "Ali res želiš izbrisati ta zapis?"
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr "Ali res želiš izbrisati te zapise?"
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr "Zapisi niso izbrisani!"
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr "Zapisi izbrisani!"
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr "Sedaj se dela na podvojenih zapisih!"
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr "Zapis shranjen!"
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr "Neveljaven obrazec!"
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr " od "
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
@@ -1251,46 +1259,52 @@ msgstr ""
"Ta zapis je bil spremenjen,\n"
"ga želiš shraniti?"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr "Ukrep"
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr "Zaženi ukrep"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr "Veza"
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr "Odpri vezo"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr "Poročila"
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr "Odpri poročilo"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr "Pošlji"
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr "Pošlji poročilo"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr "Tisk"
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr "Izpis poročila"
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Neznano"
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr "Omejitev"
@@ -1319,6 +1333,18 @@ msgstr "Nastavitev"
msgid "Current Password:"
msgstr "Trenutno geslo:"
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Različica"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Izberi različico"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Različica:"
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr "Bližnjice"
@@ -1496,21 +1522,21 @@ msgstr "Dodaj imena _polj"
msgid "Name"
msgstr "Naziv"
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr "Kako se imenuje ta izvoz?"
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr "%d zapis shranjen!"
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr "%d zapisov shranjenih!"
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1525,26 +1551,26 @@ msgstr ""
msgid "Link"
msgstr "Povezava"
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr "Dodaj"
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr "Odstrani <Del>"
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr "Ustvari nov zapis <F3>"
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr "Zbriši izbran zapis <Del>"
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr "Povrni izbran zapis <Ins>"
@@ -1567,10 +1593,10 @@ msgstr "Datoteka za uvoz:"
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr "Odpri..."
@@ -1594,19 +1620,19 @@ msgstr "Kodiranje:"
msgid "Lines to Skip:"
msgstr "Izpuščene vrstice:"
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr "Naziv polja"
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr "Najprej morate izbrati datoteke za uvažanje!"
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr "Napaka pri odpiranju CSV datoteke"
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr "Napaka obdelave datoteke pri polju %s."
@@ -1621,24 +1647,7 @@ msgstr "%d zapis uvožen!"
msgid "%d records imported!"
msgstr "%d zapisov uvoženih!"
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Napaka uvažanja!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Napaka pri uvozu zapisa %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr "Čarovnik"
@@ -1647,39 +1656,35 @@ msgstr "Čarovnik"
msgid "No String Attr."
msgstr "Ni atributov."
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr "ID"
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr "Ustvaril"
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr "Ustvarjeno"
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr "Popravil"
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr "Popravljeno"
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr "Stanja obrazca ni možno dobiti"
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr "Ni možno nastaviti stanja obrazca"
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Za uporabo te veze morate izbrati zapis!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ".."
@@ -1687,19 +1692,19 @@ msgstr ".."
msgid "F_ilters"
msgstr "_Filtri"
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr "Prikaži zaznamke filtrov"
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr "Odstrani ta zaznamek"
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr "Shrani ta filter"
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr "Ime zaznamka:"
@@ -1727,24 +1732,24 @@ msgstr "Teden"
msgid "Select a File..."
msgstr "Izberi datoteko..."
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr "Prikaži navadno besedilo"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr "Dodaj vrednost"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ":"
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr "Odstrani \"%s\""
@@ -1761,23 +1766,23 @@ msgstr "Vse datoteke"
msgid "Images"
msgstr "Slike"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr "Prevod"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr "Uredi"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr "Nejasno"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr "Pred dodajanjem prevodov morate zapis shraniti!"
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr "Drugih jezikov ni na voljo!"
@@ -1790,12 +1795,12 @@ msgstr "Dodaj obstoječi zapis"
msgid "Remove selected record <Del>"
msgstr "Odstrani izbran zapis <Del>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr "Odpri zapis <F2>"
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr "Poišči zapis <F2>"
@@ -1887,15 +1892,10 @@ msgstr "PNG slika (*.png)"
msgid "Image size too large!"
msgstr "Slika je prevelika!"
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ": "
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Neznano"
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr "Prevedi pogled"
diff --git a/share/locale/tryton.pot b/share/locale/tryton.pot
index 3e32ef5..f479a6b 100644
--- a/share/locale/tryton.pot
+++ b/share/locale/tryton.pot
@@ -1,14 +1,14 @@
# Translations template for tryton.
-# Copyright (C) 2013 Tryton
+# Copyright (C) 2014 Tryton
# This file is distributed under the same license as the tryton project.
-# FIRST AUTHOR <EMAIL at ADDRESS>, 2013.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: tryton 2.9.0\n"
+"Project-Id-Version: tryton 3.1.dev0\n"
"Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -64,62 +64,62 @@ msgstr ""
msgid "Unable to set locale %s"
msgstr ""
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
msgid "Select your action"
msgstr ""
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
msgid "No action defined!"
msgstr ""
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
msgid "Tryton Connection"
msgstr ""
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
msgid "Server:"
msgstr ""
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
msgid "Port:"
msgstr ""
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
msgid "Selection"
msgstr ""
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
msgid "Your selection:"
msgstr ""
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
#: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
#: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
#: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
msgid "Save As..."
msgstr ""
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
msgid "Always ignore this warning."
msgstr ""
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
msgid "Do you want to proceed?"
msgstr ""
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
msgid "Confirmation"
msgstr ""
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
msgid "Concurrency Exception"
msgstr ""
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
msgid ""
"<b>Write Concurrency Warning:</b>\n"
"\n"
@@ -130,120 +130,120 @@ msgid ""
" - \"Write Anyway\" to save your current version."
msgstr ""
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
msgid "Compare"
msgstr ""
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
msgid "Write Anyway"
msgstr ""
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
msgid "Error"
msgstr ""
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
msgid "Report Bug"
msgstr ""
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
msgid "Application Error!"
msgstr ""
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
msgid "Error: "
msgstr ""
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
#, python-format
msgid "To report bugs you must have an account on <u>%s</u>"
msgstr ""
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
msgid "Bug Tracker"
msgstr ""
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
msgid "User:"
msgstr ""
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
#: tryton/gui/window/dblogin.py:462
msgid "Password:"
msgstr ""
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
msgid ""
"The same bug was already reported by another user.\n"
"To keep you informed your username is added to the nosy-list of this issue"
msgstr ""
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
msgid "Created new bug with ID "
msgstr ""
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
msgid ""
"Connection error!\n"
"Bad username or password!"
msgstr ""
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
msgid "Exception:"
msgstr ""
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
msgid ""
"The server fingerprint has changed since last connection!\n"
"The application will stop connecting to this server until its fingerprint"
" is fixed."
msgstr ""
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
msgid "Security risk!"
msgstr ""
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
msgid ""
"Connection error!\n"
"Unable to connect to the server!"
msgstr ""
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
msgid "Network Error!"
msgstr ""
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
msgid "Y"
msgstr ""
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
msgid "M"
msgstr ""
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
msgid "w"
msgstr ""
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
msgid "d"
msgstr ""
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
msgid "h"
msgstr ""
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
msgid "m"
msgstr ""
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
msgid "<i>Search...</i>"
msgstr ""
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
msgid "<i>Create...</i>"
msgstr ""
@@ -251,398 +251,402 @@ msgstr ""
msgid "Open the calendar <F2>"
msgstr ""
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
msgid "Date Selection"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "y"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "yes"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "true"
msgstr ""
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
msgid "t"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "True"
msgstr ""
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
msgid "False"
msgstr ""
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr ""
+
+#: tryton/common/popup_menu.py:77
msgid "Attachments..."
msgstr ""
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
msgid "Actions..."
msgstr ""
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
msgid "Relate..."
msgstr ""
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
msgid "Report..."
msgstr ""
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
msgid "E-Mail..."
msgstr ""
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
msgid "Print..."
msgstr ""
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
msgid "_File"
msgstr ""
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
msgid "_User"
msgstr ""
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
msgid "_Options"
msgstr ""
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
msgid "Fa_vorites"
msgstr ""
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
msgid "_Help"
msgstr ""
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
#: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
#: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
msgid "Search"
msgstr ""
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
msgid "No result found."
msgstr ""
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
msgid "_Connect..."
msgstr ""
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
msgid "_Disconnect"
msgstr ""
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
msgid "Data_base"
msgstr ""
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
msgid "_New Database..."
msgstr ""
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
msgid "_Restore Database..."
msgstr ""
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
msgid "_Backup Database..."
msgstr ""
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
msgid "Dro_p Database..."
msgstr ""
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
msgid "_Quit..."
msgstr ""
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
msgid "_Preferences..."
msgstr ""
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
msgid "_Menu Reload"
msgstr ""
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
msgid "_Menu Toggle"
msgstr ""
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
msgid "_Global Search"
msgstr ""
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
msgid "_Toolbar"
msgstr ""
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
msgid "_Default"
msgstr ""
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
msgid "_Text and Icons"
msgstr ""
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
msgid "_Icons"
msgstr ""
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
msgid "_Text"
msgstr ""
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
msgid "_Menubar"
msgstr ""
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
msgid "Change Accelerators"
msgstr ""
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
msgid "_Mode"
msgstr ""
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
msgid "_Normal"
msgstr ""
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
msgid "_PDA"
msgstr ""
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
msgid "_Form"
msgstr ""
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
msgid "Save Width/Height"
msgstr ""
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
msgid "Save Tree State"
msgstr ""
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
msgid "Spell Checking"
msgstr ""
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
msgid "Tabs Position"
msgstr ""
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
msgid "Top"
msgstr ""
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
msgid "Left"
msgstr ""
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
msgid "Right"
msgstr ""
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
msgid "Bottom"
msgstr ""
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
msgid "_Previous Tab"
msgstr ""
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
msgid "_Next Tab"
msgstr ""
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
msgid "Search Limit..."
msgstr ""
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
msgid "_Email..."
msgstr ""
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
msgid "_Save Options"
msgstr ""
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
msgid "_Tips..."
msgstr ""
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
msgid "_Keyboard Shortcuts..."
msgstr ""
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
msgid "_About..."
msgstr ""
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
msgid "Manage Favorites"
msgstr ""
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
msgid ""
"The following action requires to close all tabs.\n"
"Do you want to continue?"
msgstr ""
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
msgid "Close Tab"
msgstr ""
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
msgid ""
"You are going to delete a Tryton database.\n"
"Are you really sure to proceed?"
msgstr ""
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
msgid ""
"Wrong Tryton Server Password\n"
"Please try again."
msgstr ""
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
msgid "Access denied!"
msgstr ""
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
msgid "Database drop failed with error message:\n"
msgstr ""
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
msgid "Database drop failed!"
msgstr ""
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
msgid "Database dropped successfully!"
msgstr ""
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
msgid "Open Backup File to Restore..."
msgstr ""
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
msgid ""
"It is not possible to restore a password protected database.\n"
"Backup and restore needed to be proceed manual."
msgstr ""
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
msgid "Database is password protected!"
msgstr ""
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
msgid ""
"Wrong Tryton Server Password.\n"
"Please try again."
msgstr ""
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
msgid "Database restore failed with error message:\n"
msgstr ""
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
msgid "Database restore failed!"
msgstr ""
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
msgid "Database restored successfully!"
msgstr ""
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
msgid ""
"It is not possible to dump a password protected Database.\n"
"Backup and restore needed to be proceed manual."
msgstr ""
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
msgid "Database dump failed with error message:\n"
msgstr ""
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
msgid "Database dump failed!"
msgstr ""
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
msgid "Database backuped successfully!"
msgstr ""
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "New"
msgstr ""
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
msgid "Create a new record"
msgstr ""
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
#: tryton/gui/window/win_export.py:142
msgid "Save"
msgstr ""
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
msgid "Save this record"
msgstr ""
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
msgid "Switch"
msgstr ""
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
msgid "Switch view"
msgstr ""
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "_Reload"
msgstr ""
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
msgid "Reload"
msgstr ""
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
msgid "_New"
msgstr ""
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
msgid "_Save"
msgstr ""
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
msgid "_Switch View"
msgstr ""
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
msgid "_Reload/Undo"
msgstr ""
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
msgid "_Delete..."
msgstr ""
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
msgid "_Close Tab"
msgstr ""
@@ -667,64 +671,64 @@ msgid ""
"Click on 'Change' to change the address."
msgstr ""
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
msgid "Create new database"
msgstr ""
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
msgid "C_reate"
msgstr ""
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
msgid "Create the new database."
msgstr ""
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
msgid "Server Setup:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
msgid "Server connection:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
msgid ""
"This is the URL of the server. Use server 'localhost' and port '8000' if "
"the server is installed on this computer. Click on 'Change' to change the"
" address."
msgstr ""
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
msgid "C_hange"
msgstr ""
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
msgid "Setup the server connection..."
msgstr ""
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
msgid "Tryton Server Password:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
msgid ""
"This is the password of the Tryton server. It doesn't belong to a real "
"user. This password is usually defined in the trytond configuration."
msgstr ""
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
msgid "New database setup:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
msgid "Database name:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
msgid ""
"Choose the name of the new database.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -732,22 +736,22 @@ msgid ""
"tryton"
msgstr ""
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
msgid "Default language:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
msgid ""
"Choose the default language that will be installed for this database. You"
" will be able to install new languages after installation through the "
"administration menu."
msgstr ""
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
msgid "Admin password:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
msgid ""
"Choose a password for the admin user of the new database. With these "
"credentials you will be later able to login into the database:\n"
@@ -755,55 +759,55 @@ msgid ""
"Password: <The password you set here>"
msgstr ""
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
msgid "Confirm admin password:"
msgstr ""
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
msgid "Type the Admin password again"
msgstr ""
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
msgid ""
"The database name is restricted to alpha-nummerical characters and \"_\" "
"(underscore). Avoid all accents, space and any other special characters."
msgstr ""
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
msgid "Wrong characters in database name!"
msgstr ""
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
msgid "The new admin password doesn't match the confirmation field.\n"
msgstr ""
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
msgid "Passwords doesn't match!"
msgstr ""
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
msgid "Admin password and confirmation are required to create a new database."
msgstr ""
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
msgid "Missing admin password!"
msgstr ""
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
msgid ""
"A database with the same name already exists.\n"
"Try another database name."
msgstr ""
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
msgid "This database name already exist!"
msgstr ""
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
msgid "Sorry, wrong password for the Tryton server. Please try again."
msgstr ""
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
msgid ""
"Can't create the database, caused by an unknown reason.\n"
"If there is a database created, it could be broken. Maybe drop this "
@@ -811,7 +815,7 @@ msgid ""
"Error message:\n"
msgstr ""
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
msgid "Error creating database!"
msgstr ""
@@ -859,7 +863,7 @@ msgstr ""
msgid "Choose a Tryton database to delete:"
msgstr ""
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
msgid "Server Connection:"
msgstr ""
@@ -950,15 +954,15 @@ msgstr ""
msgid "User name:"
msgstr ""
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
msgid "Restore Database"
msgstr ""
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
msgid "File to Restore:"
msgstr ""
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
msgid ""
"Choose the name of the database to be restored.\n"
"Allowed characters are alphanumerical or _ (underscore)\n"
@@ -966,25 +970,25 @@ msgid ""
"Example: tryton"
msgstr ""
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
msgid "New Database Name:"
msgstr ""
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
msgid "Update Database:"
msgstr ""
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
msgid ""
"Check for an automatic database update after restoring a database from a "
"previous Tryton version."
msgstr ""
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
msgid "Restore"
msgstr ""
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
msgid "Restore the database from file."
msgstr ""
@@ -1024,199 +1028,209 @@ msgstr ""
msgid "Attachment:"
msgstr ""
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
msgid "Previous"
msgstr ""
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
msgid "Previous Record"
msgstr ""
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
msgid "Next"
msgstr ""
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
msgid "Next Record"
msgstr ""
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
msgid "Attachment(0)"
msgstr ""
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
msgid "Add an attachment to the record"
msgstr ""
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
msgid "_Duplicate"
msgstr ""
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
msgid "_Previous"
msgstr ""
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
msgid "_Next"
msgstr ""
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
msgid "_Search"
msgstr ""
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
msgid "View _Logs..."
msgstr ""
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
msgid "A_ttachments..."
msgstr ""
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
msgid "_Actions..."
msgstr ""
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
msgid "_Relate..."
msgstr ""
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
msgid "_Report..."
msgstr ""
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
msgid "_E-Mail..."
msgstr ""
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
msgid "_Print..."
msgstr ""
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
msgid "_Export Data..."
msgstr ""
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
msgid "_Import Data..."
msgstr ""
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
#, python-format
msgid "Attachment(%d)"
msgstr ""
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
msgid "You have to select one record!"
msgstr ""
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
msgid "ID:"
msgstr ""
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
msgid "Creation User:"
msgstr ""
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
msgid "Creation Date:"
msgstr ""
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
msgid "Latest Modification by:"
msgstr ""
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
msgid "Latest Modification Date:"
msgstr ""
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
msgid "Model:"
msgstr ""
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
msgid "Are you sure to remove this record?"
msgstr ""
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
msgid "Are you sure to remove those records?"
msgstr ""
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
msgid "Records not removed!"
msgstr ""
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
msgid "Records removed!"
msgstr ""
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
msgid "Working now on the duplicated record(s)!"
msgstr ""
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
msgid "Record saved!"
msgstr ""
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
msgid "Invalid form!"
msgstr ""
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
msgid " of "
msgstr ""
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
msgid ""
"This record has been modified\n"
"do you want to save it ?"
msgstr ""
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Action"
msgstr ""
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
msgid "Launch action"
msgstr ""
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Relate"
msgstr ""
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
msgid "Open related records"
msgstr ""
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Report"
msgstr ""
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
msgid "Open report"
msgstr ""
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail"
msgstr ""
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
msgid "E-Mail report"
msgstr ""
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print"
msgstr ""
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
msgid "Print report"
msgstr ""
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr ""
+
#: tryton/gui/window/limit.py:17
msgid "Limit"
msgstr ""
@@ -1245,6 +1259,18 @@ msgstr ""
msgid "Current Password:"
msgstr ""
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr ""
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr ""
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
#: tryton/gui/window/shortcuts.py:17
msgid "Keyboard Shortcuts"
msgstr ""
@@ -1401,21 +1427,21 @@ msgstr ""
msgid "Name"
msgstr ""
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
msgid "What is the name of this export?"
msgstr ""
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
#, python-format
msgid "%d record saved!"
msgstr ""
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
#, python-format
msgid "%d records saved!"
msgstr ""
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
#, python-format
msgid ""
"Operation failed!\n"
@@ -1427,26 +1453,26 @@ msgstr ""
msgid "Link"
msgstr ""
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
msgid "Add"
msgstr ""
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
msgid "Remove <Del>"
msgstr ""
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
msgid "Create a new record <F3>"
msgstr ""
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
msgid "Delete selected record <Del>"
msgstr ""
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
#: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
msgid "Undelete selected record <Ins>"
msgstr ""
@@ -1469,10 +1495,10 @@ msgstr ""
#: tryton/gui/window/win_import.py:111
#: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
#: tryton/gui/window/view_form/view/form_gtk/image.py:62
#: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
msgid "Open..."
msgstr ""
@@ -1496,19 +1522,19 @@ msgstr ""
msgid "Lines to Skip:"
msgstr ""
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
msgid "Field name"
msgstr ""
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
msgid "You must select an import file first!"
msgstr ""
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
msgid "Error opening CSV file"
msgstr ""
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
#, python-format
msgid "Error processing the file at field %s."
msgstr ""
@@ -1523,20 +1549,7 @@ msgstr ""
msgid "%d records imported!"
msgstr ""
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr ""
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
msgid "Wizard"
msgstr ""
@@ -1545,39 +1558,35 @@ msgstr ""
msgid "No String Attr."
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
msgid "ID"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
msgid "Creation User"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
msgid "Creation Date"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
msgid "Modification User"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
msgid "Modification Date"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
msgid "Unable to get view tree state"
msgstr ""
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
msgid "Unable to set view tree state"
msgstr ""
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr ""
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
msgid ".."
msgstr ""
@@ -1585,19 +1594,19 @@ msgstr ""
msgid "F_ilters"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
msgid "Show bookmarks of filters"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
msgid "Remove this bookmark"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
msgid "Bookmark this filter"
msgstr ""
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
msgid "Bookmark Name:"
msgstr ""
@@ -1625,24 +1634,24 @@ msgstr ""
msgid "Select a File..."
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
msgid "Show plain text"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
msgid "Add value"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
#: tryton/gui/window/view_form/view/form_gtk/parser.py:255
#: tryton/gui/window/view_form/view/form_gtk/parser.py:259
msgid ":"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
#, python-format
msgid "Remove \"%s\""
msgstr ""
@@ -1659,23 +1668,23 @@ msgstr ""
msgid "Images"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
msgid "Translation"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
msgid "Edit"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
msgid "Fuzzy"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
msgid "You need to save the record before adding translations!"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
msgid "No other language available!"
msgstr ""
@@ -1688,12 +1697,12 @@ msgstr ""
msgid "Remove selected record <Del>"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
msgid "Open a record <F2>"
msgstr ""
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
msgid "Search a record <F2>"
msgstr ""
@@ -1785,15 +1794,10 @@ msgstr ""
msgid "Image size too large!"
msgstr ""
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
msgid ": "
msgstr ""
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr ""
-
#: tryton/plugins/translation/__init__.py:18
msgid "Translate view"
msgstr ""
diff --git a/tryton.desktop b/tryton.desktop
index e1bf1d1..c7d0b24 100644
--- a/tryton.desktop
+++ b/tryton.desktop
@@ -21,7 +21,8 @@ Comment[fr]=Accéder au serveur Tryton
Comment[ru]=Подключение к серверу Tryton
Comment[sl]=Dostop do Tryton strežnika
Keywords=Business;Management;Enterprise;ERP;Framework;Client;
-Exec=tryton
+Exec=tryton %u
Icon=tryton-icon
Terminal=false
+MimeType=application/tryton
Categories=Office;Finance;
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 6c6833d..b05d04d 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: tryton
-Version: 3.0.3
+Version: 3.2.0
Summary: Tryton client
Home-page: http://www.tryton.org/
Author: Tryton
-Author-email: UNKNOWN
+Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/3.0/
+Download-URL: http://downloads.tryton.org/3.2/
Description: tryton
======
@@ -65,7 +65,8 @@ Description: tryton
http://www.tryton.org/
-Platform: UNKNOWN
+Keywords: business application ERP
+Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: X11 Applications :: GTK
Classifier: Framework :: Tryton
@@ -84,6 +85,5 @@ Classifier: Natural Language :: Slovak
Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Japanese
Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Office/Business
diff --git a/tryton.egg-info/SOURCES.txt b/tryton.egg-info/SOURCES.txt
index 8f1ad7c..136190b 100644
--- a/tryton.egg-info/SOURCES.txt
+++ b/tryton.egg-info/SOURCES.txt
@@ -141,6 +141,7 @@ tryton/version.py
tryton.egg-info/PKG-INFO
tryton.egg-info/SOURCES.txt
tryton.egg-info/dependency_links.txt
+tryton.egg-info/not-zip-safe
tryton.egg-info/requires.txt
tryton.egg-info/top_level.txt
tryton/action/__init__.py
@@ -162,6 +163,7 @@ tryton/common/date_widget.py
tryton/common/datetime_strftime.py
tryton/common/domain_inversion.py
tryton/common/domain_parser.py
+tryton/common/entry_position.py
tryton/common/environment.py
tryton/common/focus.py
tryton/common/placeholder_entry.py
@@ -182,6 +184,7 @@ tryton/gui/window/form.py
tryton/gui/window/limit.py
tryton/gui/window/nomodal.py
tryton/gui/window/preference.py
+tryton/gui/window/revision.py
tryton/gui/window/shortcuts.py
tryton/gui/window/tabcontent.py
tryton/gui/window/tips.py
@@ -228,6 +231,7 @@ tryton/gui/window/view_form/view/form_gtk/integer.py
tryton/gui/window/view_form/view/form_gtk/interface.py
tryton/gui/window/view_form/view/form_gtk/many2many.py
tryton/gui/window/view_form/view/form_gtk/many2one.py
+tryton/gui/window/view_form/view/form_gtk/multiselection.py
tryton/gui/window/view_form/view/form_gtk/one2many.py
tryton/gui/window/view_form/view/form_gtk/one2one.py
tryton/gui/window/view_form/view/form_gtk/parser.py
diff --git a/tryton.egg-info/not-zip-safe b/tryton.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/tryton.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/tryton.egg-info/requires.txt b/tryton.egg-info/requires.txt
index 391fde6..f3de687 100644
--- a/tryton.egg-info/requires.txt
+++ b/tryton.egg-info/requires.txt
@@ -3,9 +3,6 @@ python-dateutil
[cdecimal]
cdecimal
-[timezone]
-pytz
-
[calendar]
GooCalendar
diff --git a/tryton/action/main.py b/tryton/action/main.py
index d06afb0..00ae9d9 100644
--- a/tryton/action/main.py
+++ b/tryton/action/main.py
@@ -8,8 +8,7 @@ import gettext
import tempfile
import os
import webbrowser
-from tryton.pyson import PYSONEncoder
-from tryton.common import RPCProgress, RPCExecute, RPCException
+from tryton.common import RPCProgress, RPCExecute, RPCException, slugify
_ = gettext.gettext
@@ -40,10 +39,9 @@ class Action(object):
if not print_p and direct_print:
print_p = True
dtemp = tempfile.mkdtemp(prefix='tryton_')
+
fp_name = os.path.join(dtemp,
- name.replace(os.sep, '_').replace(os.altsep or os.sep, '_')
- + os.extsep
- + type.replace(os.sep, '_').replace(os.altsep or os.sep, '_'))
+ slugify(name) + os.extsep + slugify(type))
with open(fp_name, 'wb') as file_d:
file_d.write(data)
if email_print:
@@ -56,23 +54,31 @@ class Action(object):
@staticmethod
def execute(act_id, data, action_type=None, context=None):
- if not action_type:
- res = False
+ def get_action_type(actions):
try:
- res, = RPCExecute('model', 'ir.action', 'read', [act_id],
- ['type'], context=context)
+ action, = actions()
except RPCException:
return
- if not res:
- raise Exception('ActionNotFound')
- action_type = res['type']
- try:
- res, = RPCExecute('model', action_type, 'search_read',
+ action_type = action['type']
+ exec_action(action_type)
+
+ def exec_action(action_type):
+ def callback(actions):
+ try:
+ action, = actions()
+ except RPCException:
+ return
+ Action._exec_action(action, data)
+
+ RPCExecute('model', action_type, 'search_read',
[('action', '=', act_id)], 0, 1, None, None,
- context=context)
- except RPCException:
- return
- Action._exec_action(res, data)
+ context=context, callback=callback)
+
+ if not action_type:
+ RPCExecute('model', 'ir.action', 'read', [act_id],
+ ['type'], context=context, callback=get_action_type)
+ else:
+ exec_action(action_type)
@staticmethod
def _exec_action(action, data=None, context=None):
@@ -85,6 +91,7 @@ class Action(object):
if 'type' not in (action or {}):
return
+ data['action_id'] = action['id']
if action['type'] == 'ir.action.act_window':
view_ids = False
view_mode = None
@@ -97,7 +104,7 @@ class Action(object):
action.setdefault('pyson_domain', '[]')
ctx = {
'active_model': data.get('res_model'),
- 'active_id': data.get('id', False),
+ 'active_id': data.get('id'),
'active_ids': data.get('ids', []),
}
ctx.update(rpc.CONTEXT)
@@ -106,6 +113,7 @@ class Action(object):
action_ctx = decoder.decode(action.get('pyson_context') or '{}')
ctx.update(action_ctx)
ctx.update(context)
+ action_ctx.update(context)
ctx['context'] = ctx
decoder = PYSONDecoder(ctx)
@@ -124,7 +132,6 @@ class Action(object):
Window.create(view_ids, res_model, res_id, domain,
action_ctx, order, view_mode, name=name,
limit=action.get('limit'),
- auto_refresh=action.get('auto_refresh'),
search_value=search_value,
icon=(action.get('icon.rec_name') or ''),
tab_domain=tab_domain)
@@ -176,25 +183,12 @@ class Action(object):
Evaluate the action with the record.
'''
action = action.copy()
- if atype in ('print', 'action'):
- email = {}
- if 'pyson_email' in action:
- email = record.expr_eval(action['pyson_email'])
- if not email:
- email = {}
- if 'subject' not in email:
- email['subject'] = action['name'].replace('_', '')
- action['email'] = email
- elif atype == 'relate':
- encoder = PYSONEncoder()
- if 'pyson_domain' in action:
- action['pyson_domain'] = encoder.encode(
- record.expr_eval(action['pyson_domain']))
- if 'pyson_context' in action:
- action['pyson_context'] = encoder.encode(
- record.expr_eval(action['pyson_context']))
-
- else:
- raise NotImplementedError("Action type '%s' is not supported" %
- atype)
+ email = {}
+ if 'pyson_email' in action:
+ email = record.expr_eval(action['pyson_email'])
+ if not email:
+ email = {}
+ if 'subject' not in email:
+ email['subject'] = action['name'].replace('_', '')
+ action['email'] = email
return action
diff --git a/tryton/client.py b/tryton/client.py
index 82d0583..6c4f2ae 100644
--- a/tryton/client.py
+++ b/tryton/client.py
@@ -116,8 +116,7 @@ class TrytonClient(object):
gtk.main()
except KeyboardInterrupt:
CONFIG.save()
- if hasattr(gtk, 'accel_map_save'):
- gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
+ gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
if __name__ == "__main__":
CLIENT = TrytonClient()
diff --git a/tryton/common/__init__.py b/tryton/common/__init__.py
index 68979ed..dda9261 100644
--- a/tryton/common/__init__.py
+++ b/tryton/common/__init__.py
@@ -3,5 +3,5 @@
from common import *
from datetime_strftime import *
from domain_inversion import domain_inversion, eval_domain, localize_domain, \
- unlocalize_domain, merge, inverse_leaf
+ merge, inverse_leaf, concat, simplify
from environment import EvalEnvironment
diff --git a/tryton/common/common.py b/tryton/common/common.py
index 1c12017..efc39ae 100644
--- a/tryton/common/common.py
+++ b/tryton/common/common.py
@@ -10,10 +10,10 @@ import os
import subprocess
import re
import logging
+import unicodedata
from functools import partial
from tryton.config import CONFIG
from tryton.config import TRYTON_ICON, PIXMAPS_DIR
-import time
import sys
import xmlrpclib
try:
@@ -38,10 +38,7 @@ try:
except ImportError:
ssl = None
from threading import Lock
-try:
- import pytz
-except ImportError:
- pytz = None
+import dateutil.tz
from tryton.exceptions import (TrytonServerError, TrytonError,
TrytonServerUnavailable)
@@ -171,8 +168,25 @@ class ModelAccess(object):
MODELACCESS = ModelAccess()
+class ModelHistory(object):
+ _models = set()
+
+ def load_history(self):
+ self._models.clear()
+ try:
+ self._models.update(rpc.execute('model', 'ir.model',
+ 'list_history', rpc.CONTEXT))
+ except TrytonServerError:
+ pass
+
+ def __contains__(self, model):
+ return model in self._models
+
+MODELHISTORY = ModelHistory()
+
+
class ViewSearch(object):
- searches = None
+ searches = {}
def load_searches(self):
try:
@@ -435,7 +449,11 @@ def file_selection(title, filename='',
win.set_icon(TRYTON_ICON)
win.set_current_folder(CONFIG['client.default_path'])
if filename:
- win.set_current_name(filename)
+ if action in (gtk.FILE_CHOOSER_ACTION_SAVE,
+ gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER):
+ win.set_current_name(filename)
+ else:
+ win.set_filename(filename)
win.set_select_multiple(multi)
win.set_default_response(gtk.RESPONSE_OK)
if filters is not None:
@@ -493,6 +511,18 @@ def file_selection(title, filename='',
return filenames
+_slugify_strip_re = re.compile(r'[^\w\s-]')
+_slugify_hyphenate_re = re.compile(r'[-\s]+')
+
+
+def slugify(value):
+ if not isinstance(value, unicode):
+ value = unicode(value)
+ value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
+ value = unicode(_slugify_strip_re.sub('', value).strip().lower())
+ return _slugify_hyphenate_re.sub('-', value)
+
+
def file_open(filename, type, print_p=False):
def save():
save_name = file_selection(_('Save As...'),
@@ -623,12 +653,8 @@ class WarningDialog(UniqueDialog):
def build_dialog(self, parent, message, title, buttons=gtk.BUTTONS_OK):
dialog = gtk.MessageDialog(parent, gtk.DIALOG_DESTROY_WITH_PARENT,
gtk.MESSAGE_WARNING, buttons)
- if hasattr(dialog, 'format_secondary_markup'):
- dialog.set_markup('<b>%s</b>' % (to_xml(title)))
- dialog.format_secondary_markup(to_xml(message))
- else:
- dialog.set_markup(
- '<b>%s</b>\n%s' % (to_xml(title), to_xml(message)))
+ dialog.set_markup('<b>%s</b>' % (to_xml(title)))
+ dialog.format_secondary_markup(to_xml(message))
return dialog
warning = WarningDialog()
@@ -982,10 +1008,15 @@ def send_bugtracker(title, msg):
title = '[no title]'
issue_id = None
msg_ids = server.filter('msg', None, {'summary': str(msg_md5)})
- if msg_ids:
- issue_ids = server.filter('issue', None, {'messages': msg_ids})
- if issue_ids:
- issue_id = issue_ids[0]
+ for msg_id in msg_ids:
+ summary = server.display(
+ 'msg%s' % msg_id, 'summary')['summary']
+ if summary == msg_md5:
+ issue_ids = server.filter(
+ 'issue', None, {'messages': msg_id})
+ if issue_ids:
+ issue_id = issue_ids[0]
+ break
if issue_id:
# issue to same message already exists, add user to nosy-list
server.set('issue' + str(issue_id), *['nosy=+' + user])
@@ -1261,42 +1292,55 @@ class RPCProgress(object):
self.error = True
self.res = False
self.exception = exception
- return True
- if not self.res:
- self.error = True
+ else:
+ if not self.res:
+ self.error = True
+ if self.callback:
+ # Post to GTK queue to be run by the main thread
+ gobject.idle_add(self.process)
return True
- def run(self, process_exception_p=True, main_iteration_p=True):
- session = rpc._SESSION
- thread.start_new_thread(self.start, ())
-
- watch = None
- i = 0
- while (not self.res) and (not self.error):
- i += 1
- if i > 1:
- watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
- self.parent.window.set_cursor(watch)
- if main_iteration_p:
- with gtk.gdk.lock:
- while gtk.events_pending():
- gtk.main_iteration()
- time.sleep(0.1)
+ def run(self, process_exception_p=True, callback=None):
+ self.process_exception_p = process_exception_p
+ self.callback = callback
+ self.session = rpc._SESSION
+ if self.parent.window:
+ watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
+ self.parent.window.set_cursor(watch)
+
+ if callback:
+ thread.start_new_thread(self.start, ())
+ return
+ else:
+ self.start()
+ return self.process()
+
+ def process(self):
if self.parent.window:
self.parent.window.set_cursor(None)
if self.exception:
- if process_exception_p:
+ if self.process_exception_p:
def rpc_execute(*args):
return RPCProgress('execute',
- args).run(process_exception_p, main_iteration_p)
+ args).run(self.process_exception_p)
result = process_exception(self.exception, *self.args,
- rpc_execute=rpc_execute, session=session)
+ rpc_execute=rpc_execute, session=self.session)
if result is False:
- raise RPCException(self.exception)
- return result
- else:
+ self.exception = RPCException(self.exception)
+ else:
+ self.exception = None
+ self.res = result
+
+ def return_():
+ if self.exception:
raise self.exception
- return self.res
+ else:
+ return self.res
+
+ if self.callback:
+ self.callback(return_)
+ else:
+ return return_()
def RPCExecute(*args, **kwargs):
@@ -1305,8 +1349,19 @@ def RPCExecute(*args, **kwargs):
rpc_context.update(kwargs['context'])
args = args + (rpc_context,)
process_exception = kwargs.get('process_exception', True)
- main_iteration = kwargs.get('main_iteration', True)
- return RPCProgress('execute', args).run(process_exception, main_iteration)
+ callback = kwargs.get('callback')
+ return RPCProgress('execute', args).run(process_exception, callback)
+
+
+def RPCContextReload(callback=None):
+ def update(context):
+ rpc.CONTEXT.clear()
+ rpc.CONTEXT.update(context())
+ if callback:
+ callback()
+ # Use RPCProgress to not send rpc.CONTEXT
+ RPCProgress('execute', ('model', 'res.user', 'get_preferences', True, {})
+ ).run(True, update)
class Tooltips(object):
@@ -1463,15 +1518,11 @@ def filter_domain(domain):
def timezoned_date(date, reverse=False):
- if pytz and rpc.CONTEXT.get('timezone') and rpc.TIMEZONE:
- lzone = pytz.timezone(rpc.CONTEXT['timezone'])
- szone = pytz.timezone(rpc.TIMEZONE)
- if reverse:
- lzone, szone = szone, lzone
- sdt = szone.localize(date, is_dst=True)
- ldt = sdt.astimezone(lzone)
- date = ldt
- return date
+ lzone = dateutil.tz.tzlocal()
+ szone = dateutil.tz.tzutc()
+ if reverse:
+ lzone, szone = szone, lzone
+ return date.replace(tzinfo=szone).astimezone(lzone)
def untimezoned_date(date):
diff --git a/tryton/common/completion.py b/tryton/common/completion.py
index 2f5b3d7..057c5d3 100644
--- a/tryton/common/completion.py
+++ b/tryton/common/completion.py
@@ -17,8 +17,7 @@ def get_completion():
completion.set_match_func(lambda *a: True)
completion.set_model(gtk.ListStore(str, int))
completion.set_text_column(0)
- if hasattr(completion.props, 'popup_set_width'):
- completion.props.popup_set_width = False
+ completion.props.popup_set_width = False
completion.insert_action_markup(0, _('<i>Search...</i>'))
completion.insert_action_markup(1, _('<i>Create...</i>'))
return completion
@@ -27,6 +26,8 @@ def get_completion():
def update_completion(entry, record, field, model, domain=None):
"Update entry completion"
def update(search_text, domain):
+ if not entry.props.window:
+ return False
if search_text != entry.get_text().decode('utf-8'):
return False
completion_model = entry.get_completion().get_model()
@@ -40,20 +41,23 @@ def update_completion(entry, record, field, model, domain=None):
domain = field.domain_get(record)
context = field.context_get(record)
domain = [('rec_name', 'ilike', '%' + search_text + '%'), domain]
- try:
- results = RPCExecute('model', model, 'search_read', domain, 0,
- CONFIG['client.limit'], None, ['rec_name'], context=context,
- process_exception=False)
- except (TrytonError, TrytonServerError):
- results = []
- if search_text != entry.get_text().decode('utf-8'):
- return False
- completion_model.clear()
- for result in results:
- completion_model.append([result['rec_name'], result['id']])
- completion_model.search_text = search_text
- # Force display of popup
- entry.emit('changed')
+
+ def callback(results):
+ try:
+ results = results()
+ except (TrytonError, TrytonServerError):
+ results = []
+ if search_text != entry.get_text().decode('utf-8'):
+ return False
+ completion_model.clear()
+ for result in results:
+ completion_model.append([result['rec_name'], result['id']])
+ completion_model.search_text = search_text
+ # Force display of popup
+ entry.emit('changed')
+ RPCExecute('model', model, 'search_read', domain, 0,
+ CONFIG['client.limit'], None, ['rec_name'], context=context,
+ process_exception=False, callback=callback)
return False
search_text = entry.get_text().decode('utf-8')
gobject.timeout_add(300, update, search_text, domain)
diff --git a/tryton/common/date_widget.py b/tryton/common/date_widget.py
index ded569d..20b4f23 100644
--- a/tryton/common/date_widget.py
+++ b/tryton/common/date_widget.py
@@ -28,6 +28,7 @@ MAPPING = {
'%M': ('__', '([_ 0-9][_ 0-9])'),
'%S': ('__', '([_ 0-9][_ 0-9])'),
'%p': ('__', '([_ AP][_ M])'),
+ '%f': ('______', '([_0-9][_0-9][_0-9][_0-9][_0-9][_0-9])'),
}
OPERATORS = {
gtk.keysyms.S: relativedelta(seconds=-1),
@@ -61,11 +62,10 @@ class DateEntry(gtk.Entry):
self.connect('focus-in-event', self._focus_in)
self.connect('focus-out-event', self._focus_out)
- if hasattr(self, 'set_icon_from_stock'):
- self.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, 'tryton-find')
- self.set_icon_tooltip_text(gtk.ENTRY_ICON_SECONDARY,
- _('Open the calendar <F2>'))
- self.connect('icon-press', DateEntry.cal_open)
+ self.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, 'tryton-find')
+ self.set_icon_tooltip_text(gtk.ENTRY_ICON_SECONDARY,
+ _('Open the calendar <F2>'))
+ self.connect('icon-press', DateEntry.cal_open)
self._interactive_input = True
self.idle_set_position(0)
@@ -154,7 +154,11 @@ class DateEntry(gtk.Entry):
def set_text(self, text):
self._interactive_input = False
try:
+ # Force position as _on_insert_text use it
+ position = self.get_position()
+ self.set_position(0)
gtk.Entry.set_text(self, text)
+ self.idle_set_position(position)
finally:
self._interactive_input = True
@@ -217,7 +221,7 @@ class DateEntry(gtk.Entry):
res = None
date = self.compute_date(self.get_text())
try:
- res = datetime.datetime(*time.strptime(date, self.format)[:6])
+ res = datetime.datetime.strptime(date, self.format)
except ValueError:
return None
if set_text:
diff --git a/tryton/common/domain_inversion.py b/tryton/common/domain_inversion.py
index e6942f7..c730de6 100644
--- a/tryton/common/domain_inversion.py
+++ b/tryton/common/domain_inversion.py
@@ -8,7 +8,10 @@ import datetime
def in_(a, b):
if isinstance(a, (list, tuple)):
- return any(operator.contains(b, x) for x in a)
+ if isinstance(b, (list, tuple)):
+ return any(operator.contains(b, x) for x in a)
+ else:
+ return operator.contains(a, b)
else:
return operator.contains(b, a)
@@ -20,7 +23,7 @@ OPERATORS = {
'>=': operator.ge,
'!=': operator.ne,
'in': in_,
- 'not in': lambda a, b: not in_(b, a),
+ 'not in': lambda a, b: not in_(a, b),
# Those operators are not supported (yet ?)
'like': lambda a, b: True,
'ilike': lambda a, b: True,
@@ -31,9 +34,9 @@ OPERATORS = {
}
-def locale_part(expression, field_name):
+def locale_part(expression, field_name, locale_name='id'):
if expression == field_name:
- return 'id'
+ return locale_name
if '.' in expression:
fieldname, local = expression.split('.', 1)
return local
@@ -80,6 +83,13 @@ def eval_leaf(part, context, boolop=operator.and_):
context_field = '%s,%s' % context_field
except TypeError:
pass
+ if (operand in ('=', '!=')
+ and isinstance(context_field, (list, tuple))
+ and isinstance(value, (int, long))):
+ operand = {
+ '=': 'in',
+ '!=': 'not in',
+ }[operand]
return OPERATORS[operand](context_field, value)
@@ -124,20 +134,15 @@ def localize_domain(domain, field_name=None):
return domain
else:
return [domain[3]] + list(domain[1:-1])
- return [locale_part(domain[0], field_name)] + list(domain[1:])
+ locale_name = 'id'
+ if isinstance(domain[2], basestring):
+ locale_name = 'rec_name'
+ return [locale_part(domain[0], field_name, locale_name)] \
+ + list(domain[1:])
else:
return [localize_domain(part, field_name) for part in domain]
-def unlocalize_domain(domain, fieldname):
- if domain in ('AND', 'OR', True, False):
- return domain
- elif is_leaf(domain):
- return ['%s.%s' % (fieldname, domain[0])] + list(domain[1:])
- else:
- return [unlocalize_domain(part, fieldname) for part in domain]
-
-
def simplify(domain):
"remove unused domain delimiter"
if is_leaf(domain):
@@ -170,6 +175,17 @@ def merge(domain, domoperator=None):
return [merge(domain)]
+def concat(*domains, **kwargs):
+ domoperator = kwargs.get('domoperator')
+ result = []
+ if domoperator:
+ result.append(domoperator)
+ for domain in domains:
+ if domain:
+ result.append(domain)
+ return simplify(merge(result))
+
+
def parse(domain):
if is_leaf(domain):
return domain
@@ -441,6 +457,17 @@ def test_merge():
['d', '=', 5], ['e', '=', 6], ['f', '=', 7]]
+def test_concat():
+ domain1 = [['a', '=', 1]]
+ domain2 = [['b', '=', 2]]
+ assert concat(domain1, domain2) == ['AND', ['a', '=', 1], ['b', '=', 2]]
+ assert concat([], domain1) == domain1
+ assert concat(domain2, []) == domain2
+ assert concat([], []) == []
+ assert concat(domain1, domain2, domoperator='OR') == [
+ 'OR', [['a', '=', 1]], [['b', '=', 2]]]
+
+
def test_evaldomain():
domain = [['x', '>', 5]]
assert eval_domain(domain, {'x': 6})
@@ -462,6 +489,13 @@ def test_evaldomain():
assert eval_domain(domain, {'x': [3, 4]})
assert not eval_domain(domain, {'x': [1, 2]})
+ domain = [['x', 'not in', [3, 5]]]
+ assert not eval_domain(domain, {'x': 3})
+ assert eval_domain(domain, {'x': 4})
+ assert not eval_domain(domain, {'x': [3]})
+ assert not eval_domain(domain, {'x': [3, 4]})
+ assert eval_domain(domain, {'x': [1, 2]})
+
domain = ['OR', ['x', '>', 10], ['x', '<', 0]]
assert eval_domain(domain, {'x': 11})
assert eval_domain(domain, {'x': -4})
@@ -494,6 +528,10 @@ def test_evaldomain():
assert not eval_domain(domain, {'x': ('test', 2)})
assert not eval_domain(domain, {'x': 'test,2'})
+ domain = [['x', '=', 1]]
+ assert eval_domain(domain, {'x': [1, 2]})
+ assert not eval_domain(domain, {'x': [2]})
+
def test_localize():
domain = [['x', '=', 5]]
@@ -502,6 +540,10 @@ def test_localize():
domain = [['x', '=', 5], ['x.code', '=', 7]]
assert localize_domain(domain, 'x') == [['id', '=', 5], ['code', '=', 7]]
+ domain = [['x', 'ilike', 'foo%'], ['x.code', '=', 'test']]
+ assert localize_domain(domain, 'x') == \
+ [['rec_name', 'ilike', 'foo%'], ['code', '=', 'test']]
+
domain = ['OR', ['AND', ['x', '>', 7], ['x', '<', 15]], ['x.code', '=', 8]]
assert localize_domain(domain, 'x') == \
['OR', ['AND', ['id', '>', 7], ['id', '<', 15]], ['code', '=', 8]]
diff --git a/tryton/common/domain_parser.py b/tryton/common/domain_parser.py
index 3fbccd6..935b245 100644
--- a/tryton/common/domain_parser.py
+++ b/tryton/common/domain_parser.py
@@ -9,7 +9,7 @@ from decimal import Decimal
import datetime
import time
import io
-import collections
+from collections import OrderedDict
from tryton.translate import date_format
from tryton.common import untimezoned_date, datetime_strftime
@@ -159,7 +159,8 @@ def append_ending_clause(domain, clause, deep):
def default_operator(field):
"Return default operator for field"
- if field['type'] in ('char', 'text', 'many2one', 'many2many', 'one2many'):
+ if field['type'] in ('char', 'text', 'many2one', 'many2many', 'one2many',
+ 'reference'):
return 'ilike'
else:
return '='
@@ -179,6 +180,38 @@ def time_format(field):
return PYSONDecoder({}).decode(field['format'])
+def split_target_value(field, value):
+ "Split the reference value into target and value"
+ assert field['type'] == 'reference'
+ target = None
+ if isinstance(value, basestring):
+ for key, text in field['selection']:
+ if value.lower().startswith(text.lower() + ','):
+ target = key
+ value = value[len(text) + 1:]
+ break
+ return target, value
+
+
+def test_split_target_value():
+ field = {
+ 'type': 'reference',
+ 'selection': [
+ ('spam', 'Spam'),
+ ('ham', 'Ham'),
+ ('e', 'Eggs'),
+ ]
+ }
+ for value, result in (
+ ('Spam', (None, 'Spam')),
+ ('foo', (None, 'foo')),
+ ('Spam,', ('spam', '')),
+ ('Ham,bar', ('ham', 'bar')),
+ ('Eggs,foo', ('e', 'foo')),
+ ):
+ assert split_target_value(field, value) == result
+
+
def convert_value(field, value):
"Convert value for field"
@@ -328,13 +361,18 @@ def test_convert_selection():
('female', 'Female'),
],
}
+ field_with_empty = field.copy()
+ field_with_empty['selection'] = (field_with_empty['selection']
+ + [('', '')])
for value, result in (
('Male', 'male'),
('male', 'male'),
('test', 'test'),
(None, None),
+ ('', ''),
):
assert convert_value(field, value) == result
+ assert convert_value(field_with_empty, value) == result
def test_convert_datetime():
@@ -344,7 +382,8 @@ def test_convert_datetime():
}
for value, result in (
('12/04/2002', datetime.datetime(2002, 12, 4)),
- ('12/04/2002 12:30:00', datetime.datetime(2002, 12, 4, 12, 30)),
+ ('12/04/2002 12:30:00', untimezoned_date(
+ datetime.datetime(2002, 12, 4, 12, 30))),
('test', None),
(None, None),
):
@@ -376,7 +415,7 @@ def test_convert_time():
assert convert_value(field, value) == result
-def format_value(field, value):
+def format_value(field, value, target=None):
"Format value for field"
def format_boolean():
@@ -402,6 +441,12 @@ def format_value(field, value):
selections = dict(field['selection'])
return selections.get(value, value) or ''
+ def format_reference():
+ if not target:
+ return format_selection()
+ selections = dict(field['selection'])
+ return '%s,%s' % (selections.get(target, target), value)
+
def format_datetime():
if not value:
return ''
@@ -432,7 +477,7 @@ def format_value(field, value):
'float': format_float,
'numeric': format_float,
'selection': format_selection,
- 'reference': format_selection,
+ 'reference': format_reference,
'datetime': format_datetime,
'date': format_date,
'time': format_time,
@@ -513,13 +558,18 @@ def test_format_selection():
('female', 'Female'),
],
}
+ field_with_empty = field.copy()
+ field_with_empty['selection'] = (field_with_empty['selection']
+ + [('', '')])
for value, result in (
('male', 'Male'),
('test', 'test'),
(False, ''),
(None, ''),
+ ('', ''),
):
assert format_value(field, value) == result
+ assert format_value(field_with_empty, value) == result
def test_format_datetime():
@@ -575,6 +625,7 @@ def complete_value(field, value):
test_value = value if value is not None else ''
if isinstance(value, list):
test_value = value[-1]
+ test_value = test_value.strip('%')
for svalue, test in field['selection']:
if test.lower().startswith(test_value.lower()):
if isinstance(value, list):
@@ -582,6 +633,18 @@ def complete_value(field, value):
else:
yield svalue
+ def complete_reference():
+ test_value = value if value is not None else ''
+ if isinstance(value, list):
+ test_value = value[-1]
+ test_value = test_value.strip('%')
+ for svalue, test in field['selection']:
+ if test.lower().startswith(test_value.lower()):
+ if isinstance(value, list):
+ yield value[:-1] + [svalue]
+ else:
+ yield likify(svalue)
+
def complete_datetime():
yield datetime.date.today()
yield datetime.datetime.now()
@@ -595,7 +658,7 @@ def complete_value(field, value):
completes = {
'boolean': complete_boolean,
'selection': complete_selection,
- 'reference': complete_selection,
+ 'reference': complete_reference,
'datetime': complete_datetime,
'date': complete_date,
'time': complete_time,
@@ -620,6 +683,18 @@ def test_complete_selection():
):
assert list(complete_value(field, value)) == result
+ field_with_empty = field.copy()
+ field_with_empty['selection'] = (field_with_empty['selection']
+ + [('', '')])
+ for value, result in (
+ ('m', ['male']),
+ ('test', []),
+ ('', ['male', 'female', '']),
+ (None, ['male', 'female', '']),
+ (['male', 'f'], [['male', 'female']]),
+ ):
+ assert list(complete_value(field_with_empty, value)) == result
+
def parenthesize(tokens):
"Nest tokens according to parenthesis"
@@ -721,11 +796,7 @@ class DomainParser(object):
"A parser for domain"
def __init__(self, fields):
- if hasattr(collections, 'OrderedDict'):
- odict = collections.OrderedDict
- else:
- odict = dict
- self.fields = odict((name, f)
+ self.fields = OrderedDict((name, f)
for name, f in fields.iteritems()
if f.get('searchable', True))
self.strings = dict((f['string'].lower(), f)
@@ -772,46 +843,53 @@ class DomainParser(object):
def string_(clause):
if not clause:
return ''
- if (isinstance(clause[0], basestring)
- and (clause[0] in self.fields
- or clause[0] == 'rec_name')):
- name, operator, value = clause
- if name not in self.fields:
- escaped = value.replace('%%', '__')
- if escaped.startswith('%') and escaped.endswith('%'):
- value = value[1:-1]
- return quote(value)
- field = self.fields[name]
- if 'ilike' in operator:
- escaped = value.replace('%%', '__')
- if escaped.startswith('%') and escaped.endswith('%'):
- value = value[1:-1]
- elif '%' not in escaped:
- if operator == 'ilike':
- operator = '='
- else:
- operator = '!'
- value = value.replace('%%', '%')
- def_operator = default_operator(field)
- if (def_operator == operator.strip()
- or (def_operator in operator
- and 'not' in operator)):
- operator = operator.rstrip(def_operator
- ).replace('not', '!').strip()
- if operator.endswith('in'):
- if operator == 'not in':
- operator = '!'
- else:
- operator = ''
- formatted_value = format_value(field, value)
- if (operator in OPERATORS and
- field['type'] in ('char', 'text', 'sha', 'selection')
- and value == ''):
- formatted_value = '""'
- return '%s: %s%s' % (quote(field['string']), operator,
- formatted_value)
- else:
+ if (not isinstance(clause[0], basestring)
+ or clause[0] in ('AND', 'OR')):
return '(%s)' % self.string(clause)
+ name, operator, value = clause[:3]
+ if name.endswith('.rec_name'):
+ name = name[:-9]
+ if name not in self.fields:
+ escaped = value.replace('%%', '__')
+ if escaped.startswith('%') and escaped.endswith('%'):
+ value = value[1:-1]
+ return quote(value)
+ field = self.fields[name]
+
+ if len(clause) > 3:
+ target = clause[3]
+ else:
+ target = None
+
+ if 'ilike' in operator:
+ escaped = value.replace('%%', '__')
+ if escaped.startswith('%') and escaped.endswith('%'):
+ value = value[1:-1]
+ elif '%' not in escaped:
+ if operator == 'ilike':
+ operator = '='
+ else:
+ operator = '!'
+ value = value.replace('%%', '%')
+ def_operator = default_operator(field)
+ if (def_operator == operator.strip()
+ or (def_operator in operator
+ and ('not' in operator
+ or '!' in operator))):
+ operator = operator.rstrip(def_operator
+ ).replace('not', '!').strip()
+ if operator.endswith('in'):
+ if operator == 'not in':
+ operator = '!'
+ else:
+ operator = ''
+ formatted_value = format_value(field, value, target)
+ if (operator in OPERATORS and
+ field['type'] in ('char', 'text', 'selection')
+ and value == ''):
+ formatted_value = '""'
+ return '%s: %s%s' % (quote(field['string']), operator,
+ formatted_value)
if not domain:
return ''
@@ -862,8 +940,13 @@ class DomainParser(object):
"Return all completion for the clause"
if len(clause) == 1:
name, = clause
- else:
+ elif len(clause) == 3:
name, operator, value = clause
+ else:
+ name, operator, value, target = clause
+ if name.endswith('.rec_name'):
+ name = name[:-9]
+ value = target
if name == 'rec_name':
if operator == 'ilike':
escaped = value.replace('%%', '__')
@@ -974,6 +1057,14 @@ class DomainParser(object):
else:
name, operator, value = clause
field = self.strings[name.lower()]
+ field_name = field['name']
+
+ target = None
+ if field['type'] == 'reference':
+ target, value = split_target_value(field, value)
+ if target:
+ field_name += '.rec_name'
+
if operator is None:
operator = default_operator(field)
if isinstance(value, list):
@@ -983,8 +1074,6 @@ class DomainParser(object):
operator = 'in'
if operator == '!':
operator = negate_operator(default_operator(field))
- if 'like' in operator:
- value = likify(value)
if field['type'] in ('integer', 'float', 'numeric',
'datetime', 'date', 'time'):
if value and '..' in value:
@@ -992,15 +1081,23 @@ class DomainParser(object):
lvalue = convert_value(field, lvalue)
rvalue = convert_value(field, rvalue)
yield iter([
- (field['name'], '>=', lvalue),
- (field['name'], '<', rvalue),
+ (field_name, '>=', lvalue),
+ (field_name, '<', rvalue),
])
continue
if isinstance(value, list):
value = [convert_value(field, v) for v in value]
+ if field['type'] in ('many2one', 'one2many',
+ 'many2many', 'one2one'):
+ field_name += '.rec_name'
else:
value = convert_value(field, value)
- yield field['name'], operator, value
+ if 'like' in operator:
+ value = likify(value)
+ if target:
+ yield (field_name, operator, value, target)
+ else:
+ yield field_name, operator, value
def test_stringable():
@@ -1034,6 +1131,28 @@ def test_string():
'string': 'Date',
'type': 'date',
},
+ 'selection': {
+ 'string': 'Selection',
+ 'type': 'selection',
+ 'selection': [
+ ('male', 'Male'),
+ ('female', 'Female'),
+ ('', ''),
+ ],
+ },
+ 'reference': {
+ 'string': 'Reference',
+ 'type': 'reference',
+ 'selection': [
+ ('spam', 'Spam'),
+ ('ham', 'Ham'),
+ ]
+ },
+ 'many2one': {
+ 'string': 'Many2One',
+ 'name': 'many2one',
+ 'type': 'many2one',
+ },
})
assert dom.string([('name', '=', 'Doe')]) == 'Name: =Doe'
assert dom.string([('name', '=', None)]) == 'Name: ='
@@ -1066,6 +1185,20 @@ def test_string():
assert dom.string([('surname', 'ilike', '%Doe%')]) == '"(Sur)Name": Doe'
assert dom.string([('date', '>=', datetime.date(2012, 10, 24))]) == \
'Date: >=10/24/2012'
+ assert dom.string([('selection', '=', '')]) == 'Selection: '
+ assert dom.string([('selection', '=', None)]) == 'Selection: '
+ assert dom.string([('selection', '!=', '')]) == 'Selection: !""'
+ assert dom.string([('selection', '=', 'male')]) == 'Selection: Male'
+ assert dom.string([('selection', '!=', 'male')]) == 'Selection: !Male'
+ assert dom.string([('reference', 'ilike', '%foo%')]) == \
+ 'Reference: foo'
+ assert dom.string([('reference.rec_name', 'ilike', '%bar%', 'spam')]) == \
+ 'Reference: Spam,bar'
+ assert dom.string([('reference', 'in', ['foo', 'bar'])]) == \
+ 'Reference: foo;bar'
+ assert dom.string([('many2one', 'ilike', '%John%')]) == 'Many2One: John'
+ assert dom.string([('many2one.rec_name', 'in', ['John', 'Jane'])]) == \
+ 'Many2One: John;Jane'
def test_group():
@@ -1174,6 +1307,20 @@ def test_parse_clause():
('female', 'Female'),
],
},
+ 'reference': {
+ 'string': 'Reference',
+ 'name': 'reference',
+ 'type': 'reference',
+ 'selection': [
+ ('spam', 'Spam'),
+ ('ham', 'Ham'),
+ ]
+ },
+ 'many2one': {
+ 'string': 'Many2One',
+ 'name': 'many2one',
+ 'type': 'many2one',
+ },
})
assert rlist(dom.parse_clause([('John',)])) == [
('rec_name', 'ilike', '%John%')]
@@ -1193,6 +1340,12 @@ def test_parse_clause():
assert rlist(dom.parse_clause([('Name', '!', ['John', 'Jane'])])) == [
('name', 'not in', ['John', 'Jane']),
]
+ assert rlist(dom.parse_clause([('Selection', None, None)])) == [
+ ('selection', '=', None),
+ ]
+ assert rlist(dom.parse_clause([('Selection', None, '')])) == [
+ ('selection', '=', ''),
+ ]
assert rlist(dom.parse_clause([('Selection', None, ['Male', 'Female'])])) \
== [
('selection', 'in', ['male', 'female'])
@@ -1204,3 +1357,21 @@ def test_parse_clause():
('integer', '>=', 3),
('integer', '<', 5),
]]
+ assert rlist(dom.parse_clause([('Reference', None, 'foo')])) == [
+ ('reference', 'ilike', '%foo%'),
+ ]
+ assert rlist(dom.parse_clause([('Reference', None, 'Spam')])) == [
+ ('reference', 'ilike', '%spam%'),
+ ]
+ assert rlist(dom.parse_clause([('Reference', None, 'Spam,bar')])) == [
+ ('reference.rec_name', 'ilike', '%bar%', 'spam'),
+ ]
+ assert rlist(dom.parse_clause([('Reference', None, ['foo', 'bar'])])) == [
+ ('reference', 'in', ['foo', 'bar']),
+ ]
+ assert rlist(dom.parse_clause([('Many2One', None, 'John')])) == [
+ ('many2one', 'ilike', '%John%'),
+ ]
+ assert rlist(dom.parse_clause([('Many2One', None, ['John', 'Jane'])])) == [
+ ('many2one.rec_name', 'in', ['John', 'Jane']),
+ ]
diff --git a/tryton/common/entry_position.py b/tryton/common/entry_position.py
new file mode 100644
index 0000000..5f92c36
--- /dev/null
+++ b/tryton/common/entry_position.py
@@ -0,0 +1,58 @@
+#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 string
+
+import gtk
+
+
+class PositionManager(object):
+ position = None
+
+ def reset_position(self, entry):
+ if entry.get_alignment() <= 0.5:
+ entry.set_position(0)
+ else:
+ entry.set_position(-1)
+
+ def focus_out(self, entry, event):
+ self.position = entry.get_position()
+ self.reset_position(entry)
+
+ def focus_in(self, entry, event):
+ if self.position is None:
+ self.reset_position(entry)
+ else:
+ entry.set_position(self.position)
+
+ def changed(self, entry):
+ if not entry.has_focus():
+ self.reset_position(entry)
+
+
+def manage_entry_position(entry):
+ manager = PositionManager()
+ entry.connect('focus-out-event', manager.focus_out)
+ entry.connect('focus-in-event', manager.focus_in)
+ entry.connect('changed', manager.changed)
+
+
+if __name__ == '__main__':
+ win = gtk.Window()
+ win.set_title('Manage Entry Position')
+ win.connect('delete-event', lambda *a: gtk.main_quit())
+ vbox = gtk.VBox()
+ win.add(vbox)
+
+ entry1 = gtk.Entry()
+ vbox.pack_start(entry1, expand=False, fill=False)
+ manage_entry_position(entry1)
+ entry1.set_text(string.ascii_letters)
+
+ entry2 = gtk.Entry()
+ entry2.set_alignment(1.0)
+ vbox.pack_start(entry2, expand=False, fill=False)
+ manage_entry_position(entry2)
+ entry2.set_text(string.ascii_letters)
+
+ win.show_all()
+ gtk.main()
diff --git a/tryton/common/popup_menu.py b/tryton/common/popup_menu.py
index 4b4e743..df44569 100644
--- a/tryton/common/popup_menu.py
+++ b/tryton/common/popup_menu.py
@@ -11,7 +11,7 @@ from tryton.gui.window.attachment import Attachment
_ = gettext.gettext
-def populate(menu, model, record, title=''):
+def populate(menu, model, record, title='', field=None):
'''
Fill menu with the actions of model for the record.
If title is filled, the actions will be put in a submenu.
@@ -23,10 +23,6 @@ def populate(menu, model, record, title=''):
return
elif record.id < 0:
return
- try:
- toolbar = RPCExecute('model', model, 'view_toolbar_get')
- except RPCException:
- return
def load(record):
if isinstance(record, (int, long)):
@@ -54,6 +50,11 @@ def populate(menu, model, record, title=''):
def attachment(menuitem):
Attachment(record, None)
+ def edit(menuitem):
+ with Window(hide_current=True, allow_similar=True):
+ Window.create(field.attrs.get('view_ids'), model, record,
+ mode=['form'])
+
if title:
if len(menu):
menu.append(gtk.SeparatorMenuItem())
@@ -67,36 +68,47 @@ def populate(menu, model, record, title=''):
if len(action_menu):
action_menu.append(gtk.SeparatorMenuItem())
+ if field:
+ edit_item = gtk.MenuItem(_('Edit...'))
+ edit_item.connect('activate', edit)
+ action_menu.append(edit_item)
+ action_menu.append(gtk.SeparatorMenuItem())
attachment_item = gtk.ImageMenuItem('tryton-attachment')
attachment_item.set_label(_('Attachments...'))
action_menu.append(attachment_item)
attachment_item.connect('activate', attachment)
- for atype, icon, label, flavor in (
- ('action', 'tryton-executable', _('Actions...'), None),
- ('relate', 'tryton-go-jump', _('Relate...'), None),
- ('print', 'tryton-print-open', _('Report...'), 'open'),
- ('print', 'tryton-print-email', _('E-Mail...'), 'email'),
- ('print', 'tryton-print', _('Print...'), 'print'),
- ):
- if len(action_menu):
- action_menu.append(gtk.SeparatorMenuItem())
- title_item = gtk.ImageMenuItem(icon)
- title_item.set_label(label)
- action_menu.append(title_item)
- if not toolbar[atype]:
- title_item.set_sensitive(False)
- continue
- submenu = gtk.Menu()
- title_item.set_submenu(submenu)
- for action in toolbar[atype]:
- action = action.copy()
- item = gtk.MenuItem(action['name'])
- submenu.append(item)
- if flavor == 'print':
- action['direct_print'] = True
- elif flavor == 'email':
- action['email_print'] = True
- item.connect('activate', activate, action, atype)
-
+ def set_toolbar(toolbar):
+ try:
+ toolbar = toolbar()
+ except RPCException:
+ return
+ for atype, icon, label, flavor in (
+ ('action', 'tryton-executable', _('Actions...'), None),
+ ('relate', 'tryton-go-jump', _('Relate...'), None),
+ ('print', 'tryton-print-open', _('Report...'), 'open'),
+ ('print', 'tryton-print-email', _('E-Mail...'), 'email'),
+ ('print', 'tryton-print', _('Print...'), 'print'),
+ ):
+ if len(action_menu):
+ action_menu.append(gtk.SeparatorMenuItem())
+ title_item = gtk.ImageMenuItem(icon)
+ title_item.set_label(label)
+ action_menu.append(title_item)
+ if not toolbar[atype]:
+ title_item.set_sensitive(False)
+ continue
+ submenu = gtk.Menu()
+ title_item.set_submenu(submenu)
+ for action in toolbar[atype]:
+ action = action.copy()
+ item = gtk.MenuItem(action['name'])
+ submenu.append(item)
+ if flavor == 'print':
+ action['direct_print'] = True
+ elif flavor == 'email':
+ action['email_print'] = True
+ item.connect('activate', activate, action, atype)
+ menu.show_all()
+ RPCExecute('model', model, 'view_toolbar_get', callback=set_toolbar)
menu.show_all()
diff --git a/tryton/common/selection.py b/tryton/common/selection.py
index 88fd848..a05ed71 100644
--- a/tryton/common/selection.py
+++ b/tryton/common/selection.py
@@ -1,15 +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 operator
+import math
+
import gtk
+import gobject
from tryton.common import RPCExecute, RPCException
+from tryton.common import eval_domain
class SelectionMixin(object):
def __init__(self, *args, **kwargs):
super(SelectionMixin, self).__init__(*args, **kwargs)
+ self.nullable_widget = True
self.selection = None
self.inactive_selection = []
self._last_domain = None
@@ -43,13 +48,20 @@ class SelectionMixin(object):
if not field:
return
+ domain = field.domain_get(record)
+ if field.attrs['type'] == 'reference':
+ # The domain on reference field is not only based on the selection
+ # so the selection can not be filtered.
+ domain = []
if 'relation' not in self.attrs:
change_with = self.attrs.get('selection_change_with') or []
- key = record._get_on_change_args(change_with).items()
+ args = record._get_on_change_args(change_with)
+ del args['id']
+ key = args.items()
key.sort()
self.init_selection(tuple(key))
+ self.filter_selection(domain, record, field)
else:
- domain = field.domain_get(record)
context = record[self.field_name].context_get(record)
domain_cache_key = str(domain) + str(context)
if domain_cache_key in self._domain_cache:
@@ -66,7 +78,8 @@ class SelectionMixin(object):
result = False
if isinstance(result, list):
selection = [(x['id'], x['rec_name']) for x in result]
- selection.append((None, ''))
+ if self.nullable_widget:
+ selection.append((None, ''))
self._last_domain = (domain, context)
self._domain_cache[domain_cache_key] = selection
else:
@@ -75,6 +88,14 @@ class SelectionMixin(object):
self.selection = selection[:]
self.inactive_selection = []
+ def filter_selection(self, domain, record, field):
+ if not domain:
+ return
+ test = lambda value: eval_domain(domain, {
+ self.field_name: value[0],
+ })
+ self.selection = filter(test, self.selection)
+
def get_inactive_selection(self, value):
if 'relation' not in self.attrs:
return ''
@@ -100,3 +121,72 @@ def selection_shortcuts(entry):
widget.popup()
entry.connect('key_press_event', key_press)
return entry
+
+
+class PopdownMixin(object):
+
+ def set_popdown(self, selection, entry):
+ if not entry.child: # entry is destroyed
+ return
+ model, lengths = self.get_popdown_model(selection)
+ entry.set_model(model)
+ # GTK 2.24 and above use a ComboBox instead of a ComboBoxEntry
+ if hasattr(entry, 'set_text_column'):
+ entry.set_text_column(0)
+ else:
+ entry.set_entry_text_column(0)
+ completion = gtk.EntryCompletion()
+ completion.set_inline_selection(True)
+ completion.set_model(model)
+ entry.child.set_completion(completion)
+ if lengths:
+ pop = sorted(lengths, reverse=True)
+ average = sum(pop) / len(pop)
+ deviation = int(math.sqrt(sum((x - average) ** 2 for x in pop) /
+ len(pop)))
+ width = max(next((x for x in pop if x < (deviation * 4)), 10), 10)
+ else:
+ width = 10
+ entry.child.set_width_chars(width)
+ if lengths:
+ entry.child.set_max_length(max(lengths))
+ completion.set_text_column(0)
+ completion.connect('match-selected', self.match_selected, entry)
+
+ def get_popdown_model(self, selection):
+ model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
+ lengths = []
+ for (value, name) in selection:
+ name = str(name)
+ model.append((name, value))
+ lengths.append(len(name))
+ return model, lengths
+
+ def match_selected(self, completion, model, iter_, entry):
+ value, = model.get(iter_, 1)
+ model = entry.get_model()
+ for i, values in enumerate(model):
+ if values[1] == value:
+ entry.set_active(i)
+ break
+
+ def get_popdown_value(self, entry):
+ active = entry.get_active()
+ if active < 0:
+ return None
+ else:
+ model = entry.get_model()
+ return model[active][1]
+
+ def set_popdown_value(self, entry, value):
+ active = -1
+ model = entry.get_model()
+ for i, selection in enumerate(model):
+ if selection[1] == value:
+ active = i
+ break
+ else:
+ if value:
+ return False
+ entry.set_active(active)
+ return True
diff --git a/tryton/config.py b/tryton/config.py
index a20aba8..f6a6d58 100644
--- a/tryton/config.py
+++ b/tryton/config.py
@@ -179,15 +179,9 @@ else:
CURRENT_DIR = os.path.abspath(os.path.normpath(os.path.join(
unicode(os.path.dirname(__file__), sys.getfilesystemencoding()),
'..')))
-PREFIX = os.path.abspath(os.path.normpath(os.path.join(
- os.path.realpath(os.path.dirname(sys.argv[0])), '..')))
PIXMAPS_DIR = os.path.join(CURRENT_DIR, 'share', 'pixmaps', 'tryton')
if not os.path.isdir(PIXMAPS_DIR):
- PIXMAPS_DIR = os.path.join(PREFIX, 'share', 'pixmaps', 'tryton')
- if not os.path.isdir(PIXMAPS_DIR):
- PREFIX = os.path.abspath(os.path.normpath(
- os.path.dirname(sys.argv[0])))
- PIXMAPS_DIR = os.path.join(PREFIX, 'share', 'pixmaps', 'tryton')
+ PIXMAPS_DIR = os.path.join(sys.prefix, 'share', 'pixmaps', 'tryton')
TRYTON_ICON = gtk.gdk.pixbuf_new_from_file(
os.path.join(PIXMAPS_DIR, 'tryton-icon.png').encode('utf-8'))
@@ -196,6 +190,6 @@ TRYTON_ICON = gtk.gdk.pixbuf_new_from_file(
def _data_dir():
data_dir = os.path.join(CURRENT_DIR, 'share', 'tryton')
if not os.path.isdir(data_dir):
- data_dir = os.path.join(PREFIX, 'share', 'tryton')
+ data_dir = os.path.join(sys.prefix, 'share', 'tryton')
return data_dir
DATA_DIR = _data_dir()
diff --git a/tryton/gui/main.py b/tryton/gui/main.py
index 1f1791c..c7c3d42 100644
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -13,8 +13,10 @@ try:
except ImportError:
import json
import webbrowser
+import threading
+
import tryton.rpc as rpc
-from tryton.common import RPCExecute, RPCException
+from tryton.common import RPCExecute, RPCException, RPCContextReload
from tryton.config import CONFIG, TRYTON_ICON, get_config_dir
import tryton.common as common
from tryton.pyson import PYSONDecoder
@@ -130,8 +132,7 @@ class Main(object):
gtk.accel_map_add_entry('<tryton>/Form/Search', gtk.keysyms.F,
gtk.gdk.CONTROL_MASK)
- if hasattr(gtk, 'accel_map_load'):
- gtk.accel_map_load(os.path.join(get_config_dir(), 'accel.map'))
+ gtk.accel_map_load(os.path.join(get_config_dir(), 'accel.map'))
self.tooltips = common.Tooltips()
@@ -293,8 +294,7 @@ class Main(object):
text_cell = gtk.CellRendererText()
global_search_completion.pack_start(text_cell)
global_search_completion.add_attribute(text_cell, "markup", 1)
- if hasattr(global_search_completion.props, 'popup_set_width'):
- global_search_completion.props.popup_set_width = True
+ global_search_completion.props.popup_set_width = True
self.global_search_entry.set_completion(global_search_completion)
self.global_search_entry.set_icon_from_stock(gtk.ENTRY_ICON_PRIMARY,
'gtk-find')
@@ -315,41 +315,52 @@ class Main(object):
global_search_completion.connect('match-selected', match_selected)
- def update(widget, search_text):
- if search_text != widget.get_text().decode('utf-8'):
+ def update(widget, search_text, callback=None):
+ def end():
+ if callback:
+ callback()
return False
+ if search_text != widget.get_text().decode('utf-8'):
+ return end()
gmodel = global_search_completion.get_model()
if not search_text or not gmodel:
gmodel.clear()
gmodel.search_text = search_text
- return False
+ return end()
if getattr(gmodel, 'search_text', None) == search_text:
- return False
- try:
- result = RPCExecute('model', 'ir.model', 'global_search',
+ return end()
+
+ def set_result(result):
+ try:
+ result = result()
+ except RPCException:
+ result = []
+ if search_text != widget.get_text().decode('utf-8'):
+ if callback:
+ callback()
+ return False
+ gmodel.clear()
+ for r in result:
+ _, model, model_name, record_id, record_name, icon = r
+ if icon:
+ text = common.to_xml(record_name)
+ common.ICONFACTORY.register_icon(icon)
+ pixbuf = widget.render_icon(stock_id=icon,
+ size=gtk.ICON_SIZE_BUTTON, detail=None)
+ else:
+ text = '<b>%s:</b>\n %s' % (
+ common.to_xml(model_name),
+ common.to_xml(record_name))
+ pixbuf = None
+ gmodel.append([pixbuf, text, model, record_id])
+ gmodel.search_text = search_text
+ # Force display of popup
+ widget.emit('changed')
+ end()
+
+ RPCExecute('model', 'ir.model', 'global_search',
search_text, CONFIG['client.limit'],
- self.menu_screen.model_name)
- except RPCException:
- result = []
- if search_text != widget.get_text().decode('utf-8'):
- return False
- gmodel.clear()
- for r in result:
- _, model, model_name, record_id, record_name, icon = r
- if icon:
- text = common.to_xml(record_name)
- common.ICONFACTORY.register_icon(icon)
- pixbuf = widget.render_icon(stock_id=icon,
- size=gtk.ICON_SIZE_BUTTON, detail=None)
- else:
- text = '<b>%s:</b>\n %s' % (
- common.to_xml(model_name),
- common.to_xml(record_name))
- pixbuf = None
- gmodel.append([pixbuf, text, model, record_id])
- gmodel.search_text = search_text
- # Force display of popup
- widget.emit('changed')
+ self.menu_screen.model_name, callback=set_result)
return False
def changed(widget):
@@ -357,13 +368,14 @@ class Main(object):
gobject.timeout_add(300, update, widget, search_text)
def activate(widget):
+ def message():
+ gmodel = global_search_completion.get_model()
+ if not len(gmodel):
+ common.message(_('No result found.'))
+ else:
+ widget.emit('changed')
search_text = widget.get_text().decode('utf-8')
- update(widget, search_text)
- gmodel = global_search_completion.get_model()
- if not len(gmodel):
- common.message(_('No result found.'))
- else:
- widget.emit('changed')
+ update(widget, search_text, message)
self.global_search_entry.connect('changed', changed)
self.global_search_entry.connect('activate', activate)
@@ -841,36 +853,54 @@ class Main(object):
page = self.notebook.get_current_page()
self.notebook.set_current_page(page - 1)
- def sig_user_preferences(self, widget):
- if not self.close_pages():
- return False
-
- def callback():
- rpc.context_reload()
+ def get_preferences(self):
+ def _set_preferences(prefs):
try:
- prefs = RPCExecute('model', 'res.user', 'get_preferences',
- False)
+ prefs = prefs()
except RPCException:
- prefs = None
+ prefs = {}
+ threads = []
+ for target in (
+ common.ICONFACTORY.load_icons,
+ common.MODELACCESS.load_models,
+ common.MODELHISTORY.load_history,
+ common.VIEW_SEARCH.load_searches,
+ ):
+ t = threading.Thread(target=target)
+ threads.append(t)
+ t.start()
+ for t in threads:
+ t.join()
if prefs and 'language_direction' in prefs:
translate.set_language_direction(prefs['language_direction'])
CONFIG['client.language_direction'] = \
prefs['language_direction']
+ self.sig_win_menu(prefs=prefs)
+ for action_id in prefs.get('actions', []):
+ Action.execute(action_id, {})
self.set_title(prefs.get('status_bar', ''))
if prefs and 'language' in prefs:
translate.setlang(prefs['language'], prefs.get('locale'))
if CONFIG['client.lang'] != prefs['language']:
self.set_menubar()
self.favorite_unset()
- self.sig_win_menu()
CONFIG['client.lang'] = prefs['language']
CONFIG.save()
- self.sig_win_menu()
- Preference(rpc._USER, callback)
- def sig_win_close(self, widget):
+ def _get_preferences():
+ RPCExecute('model', 'res.user', 'get_preferences', False,
+ callback=_set_preferences)
+
+ RPCContextReload(_get_preferences)
+
+ def sig_user_preferences(self, widget):
+ if not self.close_pages():
+ return False
+ Preference(rpc._USER, self.get_preferences)
+
+ def sig_win_close(self, widget=None):
self._sig_remove_book(widget,
- self.notebook.get_nth_page(self.notebook.get_current_page()))
+ self.notebook.get_nth_page(self.notebook.get_current_page()))
def sig_login(self, widget=None, res=None):
if not self.sig_logout(widget, disconnect=False):
@@ -889,31 +919,8 @@ class Main(object):
except TrytonServerError, exception:
common.process_exception(exception)
return
- rpc.context_reload()
if log_response > 0:
- try:
- prefs = RPCExecute('model', 'res.user', 'get_preferences',
- False)
- except RPCException:
- prefs = {}
- common.ICONFACTORY.load_icons()
- common.MODELACCESS.load_models()
- common.VIEW_SEARCH.load_searches()
- if prefs and 'language_direction' in prefs:
- translate.set_language_direction(prefs['language_direction'])
- CONFIG['client.language_direction'] = \
- prefs['language_direction']
- self.sig_win_menu(prefs=prefs)
- for action_id in prefs.get('actions', []):
- Action.execute(action_id, {})
- self.set_title(prefs.get('status_bar', ''))
- if prefs and 'language' in prefs:
- translate.setlang(prefs['language'], prefs.get('locale'))
- if CONFIG['client.lang'] != prefs['language']:
- self.set_menubar()
- self.favorite_unset()
- CONFIG['client.lang'] = prefs['language']
- CONFIG.save()
+ self.get_preferences()
elif log_response == -1:
common.message(_('Connection error!\n'
'Unable to connect to the server!'))
@@ -1071,8 +1078,12 @@ class Main(object):
size=gtk.ICON_SIZE_MENU, detail=None)
cell.set_property('pixbuf', pixbuf)
column.set_cell_data_func(favorite_renderer, favorite_setter)
+
+ def toggle_favorite(renderer, path, treeview):
+ if treeview.props.window:
+ self.toggle_favorite(renderer, path, treeview)
favorite_renderer.connect('clicked',
- lambda *a: gobject.idle_add(self.toggle_favorite, *a), treeview)
+ lambda *a: gobject.idle_add(toggle_favorite, *a), treeview)
# Unset fixed height mode to add column
treeview.set_fixed_height_mode(False)
treeview.append_column(column)
@@ -1109,8 +1120,7 @@ class Main(object):
CONFIG['client.default_width'] = Main.get_main()._width
CONFIG['client.default_height'] = Main.get_main()._height
CONFIG.save()
- if hasattr(gtk, 'accel_map_save'):
- gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
+ gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
cls.tryton_client.quit_mainloop()
@@ -1205,8 +1215,7 @@ class Main(object):
label_menu = gtk.Label(page.name)
label_menu.set_alignment(0.0, 0.5)
self.notebook.insert_page_menu(page.widget, hbox, label_menu, page_id)
- if hasattr(self.notebook, 'set_tab_reorderable'):
- self.notebook.set_tab_reorderable(page.widget, True)
+ self.notebook.set_tab_reorderable(page.widget, True)
self.notebook.set_current_page(page_id)
def _sig_remove_book(self, widget, page_widget):
@@ -1286,9 +1295,13 @@ class Main(object):
self.current_page = self.notebook.get_current_page()
current_form = self.get_page(self.current_page)
+
+ def set_cursor():
+ if self.current_page == self.notebook.get_current_page():
+ current_form.set_cursor()
# Using idle_add because the gtk.TreeView grabs the focus at the
# end of the event
- gobject.idle_add(current_form.set_cursor)
+ gobject.idle_add(set_cursor)
for dialog in current_form.dialogs:
dialog.show()
@@ -1447,7 +1460,6 @@ class Main(object):
try:
view_ids = json.loads(params.get('views', 'false'))
limit = json.loads(params.get('limit', 'null'))
- auto_refresh = json.loads(params.get('auto_refresh', 'false'))
name = json.loads(params.get('window_name', 'false'))
search_value = json.loads(params.get('search_value', '{}'),
object_hook=object_hook)
@@ -1466,7 +1478,7 @@ class Main(object):
try:
Window.create(view_ids, model, res_id=res_id, domain=domain,
context=context, mode=mode, name=name, limit=limit,
- auto_refresh=auto_refresh, search_value=search_value)
+ search_value=search_value)
except Exception:
# Prevent crashing the client
return
diff --git a/tryton/gui/window/attachment.py b/tryton/gui/window/attachment.py
index 1ad9d00..ea32637 100644
--- a/tryton/gui/window/attachment.py
+++ b/tryton/gui/window/attachment.py
@@ -1,6 +1,10 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
"Attachment"
+import os
+import urllib
+import urlparse
+
from tryton.gui.window.view_form.screen import Screen
from tryton.gui.window.win_form import WinForm
@@ -11,11 +15,12 @@ class Attachment(WinForm):
def __init__(self, record, callback=None):
self.resource = '%s,%s' % (record.model_name, record.id)
self.attachment_callback = callback
+ context = record.context_get()
+ context['resource'] = self.resource
screen = Screen('ir.attachment', domain=[
('resource', '=', self.resource),
- ], mode=['tree', 'form'], context={
- 'resource': self.resource,
- }, exclude_field='resource')
+ ], mode=['tree', 'form'], context=context,
+ exclude_field='resource')
screen.search_filter()
screen.parent = record
super(Attachment, self).__init__(screen, self.callback,
@@ -27,6 +32,19 @@ class Attachment(WinForm):
def callback(self, result):
if result:
+ resource = self.screen.group.fields['resource']
+ for record in self.screen.group:
+ resource.set_client(record, self.resource)
self.screen.group.save()
if self.attachment_callback:
self.attachment_callback()
+
+ def add_uri(self, uri):
+ self.screen.switch_view('form')
+ data_field = self.screen.group.fields['data']
+ name_field = self.screen.group.fields[data_field.attrs['filename']]
+ new_record = self.screen.new()
+ file_name = os.path.basename(urlparse.urlparse(uri).path)
+ name_field.set_client(new_record, file_name)
+ data_field.set_client(new_record, urllib.urlopen(uri).read())
+ self.screen.display()
diff --git a/tryton/gui/window/board.py b/tryton/gui/window/board.py
index 2899614..406e02c 100644
--- a/tryton/gui/window/board.py
+++ b/tryton/gui/window/board.py
@@ -37,8 +37,7 @@ class Board(SignalEvent, TabContent):
'<tryton>/Form/Close'),
]
- def __init__(self, model, view_id, context=None, name=False,
- auto_refresh=False):
+ def __init__(self, model, view_id, context=None, name=False):
super(Board, self).__init__()
try:
@@ -51,7 +50,6 @@ class Board(SignalEvent, TabContent):
self.model = model
self.view_id = view_id
self.context = context
- self.auto_refresh = auto_refresh
self.dialogs = []
if not name:
self.name = self.board.name
@@ -81,8 +79,7 @@ class Board(SignalEvent, TabContent):
return (self.model == value.model
and self.view_id == value.view_id
and self.context == value.context
- and self.name == value.name
- and self.auto_refresh == value.auto_refresh)
+ and self.name == value.name)
def sig_win_close(self, widget):
Main.get_main().sig_win_close(widget)
diff --git a/tryton/gui/window/dbcreate.py b/tryton/gui/window/dbcreate.py
index 68312ed..739bcf9 100644
--- a/tryton/gui/window/dbcreate.py
+++ b/tryton/gui/window/dbcreate.py
@@ -123,6 +123,8 @@ class DBCreate(object):
entry.handler_unblock(_hid)
def _move_cursor():
+ if not entry.props.window:
+ return
with gtk.gdk.lock:
entry.set_position(_pos)
return False
diff --git a/tryton/gui/window/dbrestore.py b/tryton/gui/window/dbrestore.py
index d9a66a3..156435b 100644
--- a/tryton/gui/window/dbrestore.py
+++ b/tryton/gui/window/dbrestore.py
@@ -50,6 +50,8 @@ class DBRestore(object):
entry.handler_unblock(_hid)
def _move_cursor():
+ if not entry.props.window:
+ return
with gtk.gdk.lock:
entry.set_position(_pos)
return False
diff --git a/tryton/gui/window/form.py b/tryton/gui/window/form.py
index eba3979..76caded 100644
--- a/tryton/gui/window/form.py
+++ b/tryton/gui/window/form.py
@@ -11,11 +11,13 @@ from tryton.gui.window import Window
from tryton.gui.window.win_export import WinExport
from tryton.gui.window.win_import import WinImport
from tryton.gui.window.attachment import Attachment
+from tryton.gui.window.revision import Revision
from tryton.signal_event import SignalEvent
from tryton.common import message, sur, sur_3b, COLOR_SCHEMES, timezoned_date
import tryton.common as common
from tryton.translate import date_format
from tryton.common import RPCExecute, RPCException
+from tryton.common.datetime_strftime import datetime_strftime
from tryton import plugins
from tabcontent import TabContent
@@ -61,6 +63,7 @@ class Form(SignalEvent, TabContent):
(_('_Next'), 'tryton-go-next', 'sig_next', '<tryton>/Form/Next'),
(_('_Search'), 'tryton-find', 'sig_search', '<tryton>/Form/Search'),
(_('View _Logs...'), None, 'sig_logs', None),
+ (_('Show revisions...'), 'tryton-clock', 'revision', None),
(None,) * 4,
(_('_Close Tab'), 'tryton-close', 'sig_win_close',
'<tryton>/Form/Close'),
@@ -87,7 +90,7 @@ class Form(SignalEvent, TabContent):
def __init__(self, model, res_id=False, domain=None, order=None, mode=None,
view_ids=None, context=None, name=False, limit=None,
- auto_refresh=False, search_value=None, tab_domain=None):
+ search_value=None, tab_domain=None):
super(Form, self).__init__()
if not mode:
@@ -96,22 +99,18 @@ class Form(SignalEvent, TabContent):
domain = []
if view_ids is None:
view_ids = []
- if context is None:
- context = {}
self.model = model
self.res_id = res_id
self.domain = domain
self.mode = mode
self.context = context
- self.auto_refresh = auto_refresh
self.view_ids = view_ids
self.dialogs = []
- self.screen = Screen(self.model, mode=mode, context=self.context,
+ self.screen = Screen(self.model, mode=mode, context=context,
view_ids=view_ids, domain=domain, limit=limit, order=order,
- readonly=bool(auto_refresh), search_value=search_value,
- tab_domain=tab_domain)
+ search_value=search_value, tab_domain=tab_domain)
self.screen.widget.show()
if not name:
@@ -119,6 +118,12 @@ class Form(SignalEvent, TabContent):
else:
self.name = name
+ if self.model not in common.MODELHISTORY:
+ self.menu_def = self.menu_def[:]
+ # Remove callback to revision
+ self.menu_def[11] = (self.menu_def[11][:2] + (None,)
+ + self.menu_def[11][3:])
+
self.create_tabcontent()
self.url_entry = url_entry = gtk.Entry()
@@ -138,6 +143,7 @@ class Form(SignalEvent, TabContent):
self.screen.signal_connect(self, 'record-message',
self._record_message)
+
self.screen.signal_connect(self, 'record-modified',
lambda *a: gobject.idle_add(self._record_modified, *a))
self.screen.signal_connect(self, 'record-saved', self._record_saved)
@@ -155,13 +161,12 @@ class Form(SignalEvent, TabContent):
in ('tree', 'graph', 'calendar'):
self.screen.search_filter()
- if auto_refresh and int(auto_refresh):
- gobject.timeout_add(int(auto_refresh) * 1000, self.sig_reload)
+ self.update_revision()
def get_toolbars(self):
try:
return RPCExecute('model', self.model, 'view_toolbar_get',
- context=self.context)
+ context=self.screen.context)
except RPCException:
return {}
@@ -178,21 +183,13 @@ class Form(SignalEvent, TabContent):
and self.domain == value.domain
and self.mode == value.mode
and self.view_ids == value.view_ids
- and self.context == value.context
+ and self.screen.context == value.screen.context
and self.name == value.name
and self.screen.limit == value.screen.limit
- and self.auto_refresh == value.auto_refresh
and self.screen.search_value == value.screen.search_value)
def destroy(self):
self.screen.destroy()
- self.screen = None
- self.widget = None
- #self.scrolledwindow.destroy()
- #self.scrolledwindow = None
-
- def sel_ids_get(self):
- return self.screen.sel_ids_get()
def ids_get(self):
return self.screen.ids_get()
@@ -247,7 +244,7 @@ class Form(SignalEvent, TabContent):
try:
res = RPCExecute('model', self.model, 'read', [obj_id],
- [x[0] for x in fields], context=self.context)
+ [x[0] for x in fields], context=self.screen.context)
except RPCException:
return
message_str = ''
@@ -264,6 +261,42 @@ class Form(SignalEvent, TabContent):
message(message_str)
return True
+ def revision(self, widget=None):
+ if not self.modified_save():
+ return
+ current_id = (self.screen.current_record.id
+ if self.screen.current_record else None)
+ try:
+ revisions = RPCExecute('model', self.model, 'history_revisions',
+ [r.id for r in self.screen.selected_records])
+ except RPCException:
+ return
+ revision = self.screen.context.get('_datetime')
+ revision = Revision(revisions, revision).run()
+ if revision != self.screen.context.get('_datetime'):
+ self.screen.clear()
+ # Update root group context that will be propagated
+ self.screen.group._context['_datetime'] = revision
+ if self.screen.current_view.view_type != 'form':
+ self.screen.search_filter(
+ self.screen.screen_container.get_text())
+ else:
+ # Test if record exist in revisions
+ self.screen.load([current_id])
+ self.screen.display(set_cursor=True)
+ self.update_revision()
+
+ def update_revision(self):
+ revision = self.screen.context.get('_datetime')
+ if revision:
+ format_ = date_format() + ' %H:%M:%S.%f'
+ revision = datetime_strftime(revision, format_)
+ self.title.set_label('%s @ %s' % (self.name, revision))
+ else:
+ self.title.set_label(self.name)
+ for button in ('new', 'save'):
+ self.buttons[button].props.sensitive = not revision
+
def sig_remove(self, widget=None):
if not common.MODELACCESS[self.model]['delete']:
return
@@ -283,7 +316,7 @@ class Form(SignalEvent, TabContent):
fields = {}
for name, field in self.screen.group.fields.iteritems():
fields[name] = field.attrs
- WinImport(self.model)
+ WinImport(self.model, self.screen.context)
def sig_save_as(self, widget=None):
while self.screen.view_to_load:
@@ -291,7 +324,7 @@ class Form(SignalEvent, TabContent):
fields = {}
for name, field in self.screen.group.fields.iteritems():
fields[name] = field.attrs
- WinExport(self.model, self.ids_get(), context=self.context)
+ WinExport(self.model, self.ids_get(), context=self.screen.context)
def sig_new(self, widget=None, autosave=True):
if not common.MODELACCESS[self.model]['create']:
@@ -308,13 +341,7 @@ class Form(SignalEvent, TabContent):
return
if not self.modified_save():
return
- res_ids = self.sel_ids_get()
- try:
- new_ids = RPCExecute('model', self.model, 'copy', res_ids, {},
- context=self.context)
- except RPCException:
- return
- self.screen.load(new_ids)
+ self.screen.copy()
self.message_info(_('Working now on the duplicated record(s)!'),
'green')
@@ -343,18 +370,17 @@ class Form(SignalEvent, TabContent):
self.activate_save()
def sig_reload(self, test_modified=True):
- if not hasattr(self, 'screen'):
- return False
if test_modified and not self.modified_save():
return False
self.screen.cancel_current()
set_cursor = False
self.screen.save_tree_state(store=False)
+ record_id = (self.screen.current_record.id
+ if self.screen.current_record else None)
if self.screen.current_view.view_type != 'form':
- obj_id = self.id_get()
self.screen.search_filter(self.screen.screen_container.get_text())
for record in self.screen.group:
- if record.id == obj_id:
+ if record.id == record_id:
self.screen.current_record = record
set_cursor = True
break
@@ -422,7 +448,7 @@ class Form(SignalEvent, TabContent):
name = '_'
if signal_data[0]:
name = str(signal_data[0])
- for button_id in ('print', 'action', 'relate', 'email', 'open', 'save',
+ for button_id in ('print', 'relate', 'email', 'open', 'save',
'attach'):
button = self.buttons[button_id]
can_be_sensitive = getattr(button, '_can_be_sensitive', True)
@@ -442,7 +468,7 @@ class Form(SignalEvent, TabContent):
def _record_modified(self, screen, signal_data):
# As it is called via idle_add, the form could have been destroyed in
# the meantime.
- if screen == self.screen:
+ if self.widget_get().props.window:
self.activate_save()
def _record_saved(self, screen, signal_data):
@@ -472,15 +498,16 @@ class Form(SignalEvent, TabContent):
action = action.copy()
if not self.screen.save_current():
return
- record_id = self.screen.id_get()
- record_ids = self.screen.sel_ids_get()
+ record_id = (self.screen.current_record.id
+ if self.screen.current_record else None)
+ record_ids = [r.id for r in self.screen.selected_records]
action = Action.evaluate(action, atype, self.screen.current_record)
data = {
'model': self.screen.model_name,
'id': record_id,
'ids': record_ids,
}
- Action._exec_action(action, data, self.context)
+ Action._exec_action(action, data, self.screen.context)
def activate_save(self):
self.buttons['save'].props.sensitive = self.screen.modified()
@@ -491,6 +518,13 @@ class Form(SignalEvent, TabContent):
def create_toolbar(self, toolbars):
gtktoolbar = super(Form, self).create_toolbar(toolbars)
+ attach_btn = self.buttons['attach']
+ attach_btn.drag_dest_set(gtk.DEST_DEFAULT_ALL, [
+ ('text/uri-list', 0, 0),
+ ], gtk.gdk.ACTION_MOVE)
+ attach_btn.connect('drag_data_received',
+ self.attach_drag_data_received)
+
iconstock = {
'print': 'tryton-print',
'action': 'tryton-executable',
@@ -514,7 +548,9 @@ class Form(SignalEvent, TabContent):
tbutton.connect('toggled', self.action_popup)
self.tooltips.set_tip(tbutton, tooltip)
self.buttons[special_action] = tbutton
- tbutton._can_be_sensitive = bool(tbutton._menu.get_children())
+ if action_type != 'action':
+ tbutton._can_be_sensitive = bool(
+ tbutton._menu.get_children())
else:
tbutton = gtk.SeparatorToolItem()
gtktoolbar.insert(tbutton, -1)
@@ -525,6 +561,9 @@ class Form(SignalEvent, TabContent):
menu = gtk.Menu()
menu.connect('deactivate', self._popup_menu_hide, widget)
+ if keyword == 'action':
+ widget.connect('toggled', self._update_action_popup, menu)
+
for action in actions:
new_action = action.copy()
if special_action == 'print':
@@ -539,18 +578,6 @@ class Form(SignalEvent, TabContent):
menuitem.connect('activate', self._popup_menu_selected, widget,
new_action, keyword)
menu.add(menuitem)
- if keyword == 'action':
- menu.add(gtk.SeparatorMenuItem())
- for plugin in plugins.MODULES:
- for name, func in plugin.get_plugins(self.model):
- menuitem = gtk.MenuItem('_' + name)
- menuitem.set_use_underline(True)
- menuitem.connect('activate', lambda m, func: func({
- 'model': self.model,
- 'ids': self.id_get(),
- 'id': self.id_get(),
- }), func)
- menu.add(menuitem)
return menu
def _popup_menu_selected(self, menuitem, togglebutton, action, keyword):
@@ -566,6 +593,52 @@ class Form(SignalEvent, TabContent):
def _popup_menu_hide(self, menuitem, togglebutton):
togglebutton.props.active = False
+ def _update_action_popup(self, tbutton, menu):
+ for item in menu.get_children():
+ if (getattr(item, '_update_action', False)
+ or isinstance(item, gtk.SeparatorMenuItem)):
+ menu.remove(item)
+
+ buttons = self.screen.get_buttons()
+ if buttons:
+ menu.add(gtk.SeparatorMenuItem())
+ for button in buttons:
+ menuitem = gtk.ImageMenuItem(button.attrs.get('icon'))
+ menuitem.set_label('_' + button.attrs.get('string', _('Unknown')))
+ menuitem.set_use_underline(True)
+ menuitem.connect('activate',
+ lambda m, attrs: self.screen.button(attrs), button.attrs)
+ menuitem._update_action = True
+ menu.add(menuitem)
+
+ menu.add(gtk.SeparatorMenuItem())
+ for plugin in plugins.MODULES:
+ for name, func in plugin.get_plugins(self.model):
+ menuitem = gtk.MenuItem('_' + name)
+ menuitem.set_use_underline(True)
+ menuitem.connect('activate', lambda m, func: func({
+ 'model': self.model,
+ 'ids': [r.id
+ for r in self.screen.selected_records],
+ 'id': self.id_get(),
+ }), func)
+ menuitem._update_action = True
+ menu.add(menuitem)
+
def set_cursor(self):
if self.screen:
self.screen.set_cursor(reset_view=False)
+
+ def attach_drag_data_received(self, widget, context, x, y, selection, info,
+ timestamp):
+ record = self.screen.current_record
+ if not record or record.id < 0:
+ return
+ win_attach = Attachment(record,
+ lambda: self.update_attachment_count(reload=True))
+ if info == 0:
+ for uri in selection.data.splitlines():
+ # Win32 cut&paste terminates the list with a NULL character
+ if not uri or uri == '\0':
+ continue
+ win_attach.add_uri(uri)
diff --git a/tryton/gui/window/revision.py b/tryton/gui/window/revision.py
new file mode 100644
index 0000000..ec371b8
--- /dev/null
+++ b/tryton/gui/window/revision.py
@@ -0,0 +1,68 @@
+#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 gtk
+import gettext
+
+from tryton.config import TRYTON_ICON
+from tryton.common import get_toplevel_window
+from tryton.common.date_widget import DateEntry
+from tryton.common.datetime_strftime import datetime_strftime
+from tryton.translate import date_format
+
+_ = gettext.gettext
+
+
+class Revision(object):
+ 'Ask revision'
+
+ def __init__(self, revisions, revision=None):
+ self.parent = get_toplevel_window()
+ self.win = gtk.Dialog(_('Revision'), self.parent,
+ gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ self.win.set_default_response(gtk.RESPONSE_OK)
+ self.win.set_icon(TRYTON_ICON)
+ self.win.set_has_separator(True)
+ self.win.vbox.set_spacing(3)
+ self.win.vbox.pack_start(gtk.Label(
+ _('Select a revision')), expand=False, fill=True)
+ self.win.vbox.pack_start(gtk.HSeparator())
+ hbox = gtk.HBox(spacing=3)
+ hbox.pack_start(gtk.Label(_('Revision:')), expand=True, fill=True)
+ format_ = date_format() + ' %H:%M:%S.%f'
+ self.entry = DateEntry(format_)
+ if revision:
+ self.entry.set_text(datetime_strftime(revision, format_))
+ list_store = gtk.ListStore(str, str)
+ list_store.append(('', ''))
+ for revision, id_, name in revisions:
+ list_store.append((datetime_strftime(revision, format_), name))
+ combobox = gtk.ComboBoxEntry(list_store)
+ combobox.add(self.entry)
+ cell = gtk.CellRendererText()
+ combobox.pack_start(cell, True)
+ combobox.add_attribute(cell, 'text', 1)
+ hbox.pack_start(combobox, expand=True, fill=True)
+ combobox.set_entry_text_column(0)
+ combobox.connect('changed', self.changed)
+ self.entry.set_property('activates_default', True)
+ self.win.vbox.pack_start(hbox, expand=True, fill=True)
+ self.win.show_all()
+
+ def changed(self, combobox):
+ # set_text must be called because DateEntry doesn't work correctly with
+ # the default insert/delete text behavior of combobox
+ model = combobox.get_model()
+ idx = combobox.get_active()
+ if idx >= 0:
+ self.entry.set_text(model[idx][0])
+
+ def run(self):
+ response = self.win.run()
+ revision = None
+ if response == gtk.RESPONSE_OK:
+ revision = self.entry.date_get()
+ self.parent.present()
+ self.win.destroy()
+ return revision
diff --git a/tryton/gui/window/tabcontent.py b/tryton/gui/window/tabcontent.py
index 9ac5dd5..401c0dc 100644
--- a/tryton/gui/window/tabcontent.py
+++ b/tryton/gui/window/tabcontent.py
@@ -43,11 +43,12 @@ class TabContent(object):
self.widget.pack_start(self.scrolledwindow)
def make_title_bar(self):
- title = gtk.Label()
+ self.title = title = gtk.Label()
title.modify_font(pango.FontDescription("bold 14"))
title.set_label(self.name)
title.set_padding(10, 4)
title.set_alignment(0.0, 0.5)
+ title.set_size_request(0, -1) # Allow overflow
title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000"))
title.show()
diff --git a/tryton/gui/window/view_board/action.py b/tryton/gui/window/view_board/action.py
index a14b74f..77b17c0 100644
--- a/tryton/gui/window/view_board/action.py
+++ b/tryton/gui/window/view_board/action.py
@@ -140,4 +140,7 @@ class Action(SignalEvent):
if hasattr(self, 'screen'): # Catch early update
# Using idle_add to prevent corruption of the event who triggered
# the update.
- gtk.idle_add(self.display)
+ def display():
+ if self.screen.widget.props.window:
+ self.display()
+ gtk.idle_add(display)
diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py
index e83543f..04734bb 100644
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -1,11 +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.
import os
+from itertools import chain
import tempfile
import locale
from tryton.common import datetime_strftime, \
- domain_inversion, eval_domain, localize_domain, unlocalize_domain, \
- merge, inverse_leaf, EvalEnvironment
+ domain_inversion, eval_domain, localize_domain, \
+ merge, inverse_leaf, concat, simplify, EvalEnvironment
import tryton.common as common
import time
import datetime
@@ -23,15 +24,11 @@ class Field(object):
set: save the value from the server
set_client: save the value from the widget
'''
+ _default = None
- def __new__(cls, ctype):
- klass = TYPES.get(ctype, CharField)
- return klass
-
-
-class CharField(object):
-
- _default = ''
+ @staticmethod
+ def get_field(ctype):
+ return TYPES.get(ctype, CharField)
def __init__(self, attrs):
self.attrs = attrs
@@ -49,7 +46,7 @@ class CharField(object):
screen_domain = domain_inversion(record.group.domain4inversion,
self.name, EvalEnvironment(record))
if isinstance(screen_domain, bool) and not screen_domain:
- screen_domain = [('id', '=', False)]
+ screen_domain = [('id', '=', None)]
elif isinstance(screen_domain, bool) and screen_domain:
screen_domain = []
attr_domain = record.expr_eval(self.attrs.get('domain', []))
@@ -57,15 +54,10 @@ class CharField(object):
def domain_get(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return [localize_domain(screen_domain), attr_domain]
+ return concat(localize_domain(screen_domain), attr_domain)
def validation_domains(self, record):
- screen_domain, attr_domain = self.domains_get(record)
- if attr_domain:
- return (screen_domain, [screen_domain,
- unlocalize_domain(attr_domain, self.name)])
- else:
- return screen_domain, screen_domain
+ return concat(*self.domains_get(record))
def context_get(self, record):
context = record.context_get().copy()
@@ -87,27 +79,30 @@ class CharField(object):
return True
res = True
self.get_state_attrs(record)['domain_readonly'] = False
- inverted_domain, domain = self.validation_domains(record)
+ domain = simplify(self.validation_domains(record))
if not softvalidation:
res = res and self.check_required(record)
if isinstance(domain, bool):
res = res and domain
- elif domain == [('id', '=', False)]:
+ elif domain == [('id', '=', None)]:
res = False
else:
- if (isinstance(inverted_domain, list)
- and len(inverted_domain) == 1
- and inverted_domain[0][1] == '='):
+ if (isinstance(domain, list)
+ and len(domain) == 1
+ and domain[0][1] == '='):
# If the inverted domain is so constraint that only one value
# is possible we should use it. But we must also pay attention
# to the fact that the original domain might be a 'OR' domain
# and thus not preventing the modification of fields.
- leftpart, _, value = inverted_domain[0][:3]
+ leftpart, _, value = domain[0][:3]
if value is False:
# XXX to remove once server domains are fixed
value = None
setdefault = True
- original_domain = merge(record.group.domain)
+ if record.group.domain:
+ original_domain = merge(record.group.domain)
+ else:
+ original_domain = merge(domain)
domain_readonly = original_domain[0] == 'AND'
if '.' in leftpart:
recordpart, localpart = leftpart.split('.', 1)
@@ -129,7 +124,7 @@ class CharField(object):
record.value[self.name] = value
def get(self, record):
- return record.value.get(self.name) or self._default
+ return record.value.get(self.name, self._default)
def get_eval(self, record):
return self.get(record)
@@ -152,7 +147,7 @@ class CharField(object):
record.signal('record-changed')
def get_client(self, record):
- return record.value.get(self.name) or self._default
+ return self.get(record)
def set_default(self, record, value):
self.set(record, value)
@@ -186,7 +181,14 @@ class CharField(object):
return {}
-class SelectionField(CharField):
+class CharField(Field):
+ _default = ''
+
+ def get(self, record):
+ return super(CharField, self).get(record) or self._default
+
+
+class SelectionField(Field):
_default = None
@@ -194,18 +196,18 @@ class SelectionField(CharField):
return record.value.get(self.name)
-class DateTimeField(CharField):
+class DateTimeField(Field):
_default = None
def set_client(self, record, value, force_change=False):
- if not isinstance(value, datetime.datetime):
+ if not isinstance(value, datetime.datetime) and value is not None:
try:
value = datetime.datetime(*time.strptime(value,
date_format() + ' ' + self.time_format(record))[:6])
- value = common.untimezoned_date(value)
except ValueError:
value = self._default
+ value = common.untimezoned_date(value)
super(DateTimeField, self).set_client(record, value,
force_change=force_change)
@@ -221,17 +223,20 @@ class DateTimeField(CharField):
return record.expr_eval(self.attrs['format'])
-class DateField(CharField):
+class DateField(Field):
_default = None
def set_client(self, record, value, force_change=False):
- if not isinstance(value, datetime.date):
+ if not isinstance(value, datetime.date) and value is not None:
try:
value = datetime.date(*time.strptime(value,
date_format())[:3])
except ValueError:
value = self._default
+ elif isinstance(value, datetime.datetime):
+ assert(value.time() == datetime.time())
+ value = value.date()
super(DateField, self).set_client(record, value,
force_change=force_change)
@@ -242,17 +247,19 @@ class DateField(CharField):
return ''
-class TimeField(CharField):
+class TimeField(Field):
_default = None
def set_client(self, record, value, force_change=False):
- if not isinstance(value, datetime.time):
+ if not isinstance(value, datetime.time) and value is not None:
try:
value = datetime.time(*time.strptime(value,
self.time_format(record))[3:6])
except ValueError:
- value = None
+ value = self._default
+ elif isinstance(value, datetime.datetime):
+ value = value.time()
super(TimeField, self).set_client(record, value,
force_change=force_change)
@@ -266,7 +273,7 @@ class TimeField(CharField):
return record.expr_eval(self.attrs['format'])
-class FloatField(CharField):
+class FloatField(Field):
_default = None
default_digits = (16, 2)
@@ -346,7 +353,7 @@ class IntegerField(FloatField):
return super(IntegerField, self).get_client(record, factor=int(factor))
-class BooleanField(CharField):
+class BooleanField(Field):
_default = False
@@ -362,7 +369,7 @@ class BooleanField(CharField):
return bool(record.value.get(self.name))
-class M2OField(CharField):
+class M2OField(Field):
'''
internal = (id, name)
'''
@@ -410,7 +417,7 @@ class M2OField(CharField):
if not rec_name and value >= 0:
try:
result, = RPCExecute('model', self.attrs['relation'], 'read',
- [value], ['rec_name'], main_iteration=False)
+ [value], ['rec_name'])
except RPCException:
return False
rec_name = result['rec_name'] or ''
@@ -431,12 +438,12 @@ class M2OField(CharField):
def validation_domains(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return screen_domain, screen_domain
+ return screen_domain
def domain_get(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return [localize_domain(inverse_leaf(screen_domain), self.name),
- attr_domain]
+ return concat(localize_domain(inverse_leaf(screen_domain), self.name),
+ attr_domain)
def get_state_attrs(self, record):
result = super(M2OField, self).get_state_attrs(record)
@@ -451,7 +458,7 @@ class O2OField(M2OField):
pass
-class O2MField(CharField):
+class O2MField(Field):
'''
internal = Group of the related objects
'''
@@ -470,10 +477,12 @@ class O2MField(CharField):
def _group_changed(self, group, record):
if not record.parent:
return
- record.parent.modified_fields.setdefault(self.name)
- self.sig_changed(record.parent)
- record.parent.validate(softvalidation=True)
- record.parent.signal('record-changed')
+ # Store parent as it could be removed by validation
+ parent = record.parent
+ parent.modified_fields.setdefault(self.name)
+ self.sig_changed(parent)
+ parent.validate(softvalidation=True)
+ parent.signal('record-changed')
def _group_list_changed(self, group, signal):
if group.model_name == group.parent.model_name:
@@ -521,9 +530,11 @@ class O2MField(CharField):
return []
record_removed = record.value[self.name].record_removed
record_deleted = record.value[self.name].record_deleted
- result = [('add', [])]
+ result = []
parent_name = self.attrs.get('relation_field', '')
+ to_add = []
to_create = []
+ to_write = []
for record2 in record.value[self.name]:
if record2 in record_removed or record2 in record_deleted:
continue
@@ -531,18 +542,20 @@ class O2MField(CharField):
values = record2.get()
values.pop(parent_name, None)
if record2.modified and values:
- result.append(('write', [record2.id], values))
- result[0][1].append(record2.id)
+ to_write.extend(([record2.id], values))
+ to_add.append(record2.id)
else:
values = record2.get()
values.pop(parent_name, None)
to_create.append(values)
+ if to_add:
+ result.append(('add', to_add))
if to_create:
result.append(('create', to_create))
- if not result[0][1]:
- del result[0]
+ if to_write:
+ result.append(('write',) + tuple(to_write))
if record_removed:
- result.append(('unlink', [x.id for x in record_removed]))
+ result.append(('remove', [x.id for x in record_removed]))
if record_deleted:
result.append(('delete', [x.id for x in record_deleted]))
return result
@@ -590,15 +603,15 @@ class O2MField(CharField):
if field_names:
try:
fields = RPCExecute('model', self.attrs['relation'],
- 'fields_get', list(field_names),
- main_iteration=False, context=context)
+ 'fields_get', list(field_names), context=context)
except RPCException:
return
group.load_fields(fields)
if mode == 'list ids':
for old_record in group:
- group.remove(old_record, remove=True, signal=False)
+ if old_record.id not in value:
+ group.remove(old_record, remove=True, signal=False)
group.load(value)
else:
for vals in value:
@@ -634,7 +647,23 @@ class O2MField(CharField):
self._connect_value(group)
def set_client(self, record, value, force_change=False):
- pass
+ # domain inversion could try to set id as value
+ if isinstance(value, (int, long)):
+ value = [value]
+
+ previous_ids = [r.id for r in record.value.get(self.name) or []]
+ self._set_value(record, value)
+ # The order of the ids is not significant
+ if set(previous_ids) != set(value):
+ record.modified_fields.setdefault(self.name)
+ record.signal('record-modified')
+ self.sig_changed(record)
+ record.validate(softvalidation=True)
+ record.signal('record-changed')
+ elif force_change:
+ self.sig_changed(record)
+ record.validate(softvalidation=True)
+ record.signal('record-changed')
def set_default(self, record, value):
self.set(record, value, _default=True)
@@ -650,14 +679,14 @@ class O2MField(CharField):
if value and (value.get('add') or value.get('update')):
context = self.context_get(record)
fields = record.value[self.name].fields
- field_names = set(f for v in (
- value.get('add', []) + value.get('update', []))
+ values = chain(value.get('update', []),
+ (d for _, d in value.get('add', [])))
+ field_names = set(f for v in values
for f in v if f not in fields and f != 'id')
if field_names:
try:
fields = RPCExecute('model', self.attrs['relation'],
- 'fields_get', list(field_names), main_iteration=False,
- context=context)
+ 'fields_get', list(field_names), context=context)
except RPCException:
return False
else:
@@ -678,9 +707,9 @@ class O2MField(CharField):
if value and (value.get('add') or value.get('update', [])):
record.value[self.name].add_fields(fields, signal=False)
- for vals in value.get('add', []):
+ for index, vals in value.get('add', []):
new_record = record.value[self.name].new(default=False)
- record.value[self.name].add(new_record)
+ record.value[self.name].add(new_record, index)
new_record.set_on_change(vals)
for vals in value.get('update', []):
@@ -693,7 +722,7 @@ class O2MField(CharField):
def validation_domains(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return screen_domain, screen_domain
+ return screen_domain
def validate(self, record, softvalidation=False):
if self.attrs.get('readonly'):
@@ -723,7 +752,8 @@ class O2MField(CharField):
def domain_get(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return [localize_domain(inverse_leaf(screen_domain)), attr_domain]
+ return concat(localize_domain(inverse_leaf(screen_domain), self.name),
+ attr_domain)
class M2MField(O2MField):
@@ -732,7 +762,7 @@ class M2MField(O2MField):
return self.get_eval(record)
-class ReferenceField(CharField):
+class ReferenceField(Field):
_default = None
@@ -780,6 +810,12 @@ class ReferenceField(CharField):
force_change=force_change)
def set(self, record, value):
+ if record.parent_name == self.name:
+ if record.parent:
+ value = '%s,%s' % (record.group.parent.model_name,
+ record.parent.id)
+ else:
+ value = None
if not value:
record.value[self.name] = self._default
return
@@ -799,24 +835,24 @@ class ReferenceField(CharField):
if not rec_name and ref_id >= 0:
try:
result, = RPCExecute('model', ref_model, 'read', [ref_id],
- ['rec_name'], main_iteration=False)
+ ['rec_name'])
except RPCException:
return
rec_name = result['rec_name']
elif ref_model:
rec_name = ''
else:
- rec_name = ref_id
+ rec_name = str(ref_id)
record.value[self.name] = ref_model, ref_id
record.value[self.name + '.rec_name'] = rec_name
-class BinaryField(CharField):
+class BinaryField(Field):
_default = None
def get(self, record):
- result = record.value.get(self.name) or self._default
+ result = record.value.get(self.name, self._default)
if isinstance(result, basestring):
try:
with open(result, 'rb') as fp:
@@ -854,8 +890,7 @@ class BinaryField(CharField):
context = record.context_get()
try:
values, = RPCExecute('model', record.model_name, 'read',
- [record.id], [self.name], main_iteration=False,
- context=context)
+ [record.id], [self.name], context=context)
except RPCException:
return ''
_, filename = tempfile.mkstemp(prefix='tryton_')
@@ -865,21 +900,24 @@ class BinaryField(CharField):
return self.get(record)
-class DictField(CharField):
+class DictField(Field):
_default = {}
+ def get_client(self, record):
+ return super(DictField, self).get_client(record) or self._default
+
def validation_domains(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return screen_domain, screen_domain
+ return screen_domain
def domain_get(self, record):
screen_domain, attr_domain = self.domains_get(record)
- return [localize_domain(inverse_leaf(screen_domain)), attr_domain]
+ return concat(localize_domain(inverse_leaf(screen_domain)),
+ attr_domain)
TYPES = {
'char': CharField,
- 'sha': CharField,
'float_time': FloatField,
'integer': IntegerField,
'biginteger': IntegerField,
diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py
index 695513f..cea94f5 100644
--- a/tryton/gui/window/view_form/model/group.py
+++ b/tryton/gui/window/view_form/model/group.py
@@ -1,9 +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.
-try:
- from weakref import WeakSet
-except ImportError:
- from weakrefset import WeakSet
+from weakref import WeakSet
from record import Record
from field import Field, O2MField
@@ -153,7 +150,7 @@ class Group(SignalEvent, list):
def load_fields(self, fields):
for name, attr in fields.iteritems():
- field = Field(attr['type'])
+ field = Field.get_field(attr['type'])
attr['name'] = name
self.fields[name] = field(attr)
if isinstance(self.fields[name], O2MField) \
@@ -206,7 +203,7 @@ class Group(SignalEvent, list):
for fnct in self.on_write:
try:
res += RPCExecute('model', self.model_name, fnct, ids,
- main_iteration=False, context=self.context)
+ context=self.context)
except RPCException:
return []
return list({}.fromkeys(res))
@@ -395,7 +392,7 @@ class Group(SignalEvent, list):
if len(new) and len(to_add):
try:
values = RPCExecute('model', self.model_name, 'default_get',
- to_add.keys(), main_iteration=False, context=self.context)
+ to_add.keys(), context=self.context)
except RPCException:
return False
for record in new:
@@ -419,7 +416,6 @@ class Group(SignalEvent, list):
pass
self.clear()
super(Group, self).destroy()
- self.parent = None
def get_by_path(self, path):
'return record by path'
diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py
index 35a08b1..3241c0c 100644
--- a/tryton/gui/window/view_form/model/record.py
+++ b/tryton/gui/window/view_form/model/record.py
@@ -118,8 +118,7 @@ class Record(SignalEvent):
exception = None
try:
values = RPCExecute('model', self.model_name, 'read',
- id2record.keys(), fnames, context=ctx,
- main_iteration=False)
+ id2record.keys(), fnames, context=ctx)
except RPCException, exception:
values = [{'id': x} for x in id2record]
default_values = dict((f, None) for f in fnames)
@@ -161,6 +160,13 @@ class Record(SignalEvent):
return self.group.parent_name
@property
+ def root_parent(self):
+ parent = self
+ while parent.parent:
+ parent = parent.parent
+ return parent
+
+ @property
def depth(self):
parent = self.parent
i = 0
@@ -281,10 +287,12 @@ class Record(SignalEvent):
return result
def pre_validate(self):
- values = self.get()
+ if not self.modified_fields:
+ return True
+ values = self._get_on_change_args(self.modified_fields)
try:
RPCExecute('model', self.model_name, 'pre_validate', values,
- main_iteration=False, context=self.context_get())
+ context=self.context_get())
except RPCException:
return False
return True
@@ -295,8 +303,7 @@ class Record(SignalEvent):
value = self.get()
try:
res, = RPCExecute('model', self.model_name, 'create',
- [value], main_iteration=False,
- context=self.context_get())
+ [value], context=self.context_get())
except RPCException:
return False
old_id = self.id
@@ -310,8 +317,7 @@ class Record(SignalEvent):
context['_timestamp'] = self.get_timestamp()
try:
RPCExecute('model', self.model_name, 'write',
- [self.id], value, main_iteration=False,
- context=context)
+ [self.id], value, context=context)
except RPCException:
return False
self._loaded.clear()
@@ -344,7 +350,7 @@ class Record(SignalEvent):
reload_ids = list(reload_ids)
try:
RPCExecute('model', record.model_name, 'delete', list(record_ids),
- main_iteration=False, context=ctx)
+ context=ctx)
except RPCException:
return False
if reload_ids:
@@ -355,8 +361,7 @@ class Record(SignalEvent):
if len(self.group.fields):
try:
vals = RPCExecute('model', self.model_name, 'default_get',
- self.group.fields.keys(), main_iteration=False,
- context=self.context_get())
+ self.group.fields.keys(), context=self.context_get())
except RPCException:
return
if (self.parent
@@ -373,12 +378,12 @@ class Record(SignalEvent):
if not fieldinfo.attrs.get('autocomplete'):
continue
self.do_autocomplete(fieldname)
+ return vals
def rec_name(self):
try:
return RPCExecute('model', self.model_name, 'read', [self.id],
- ['rec_name'], main_iteration=False,
- context=self.context_get())[0]['rec_name']
+ ['rec_name'], context=self.context_get())[0]['rec_name']
except RPCException:
return ''
@@ -415,6 +420,8 @@ class Record(SignalEvent):
for fieldname, value in val.items():
if fieldname not in self.group.fields:
continue
+ if fieldname == self.group.exclude_field:
+ continue
if isinstance(self.group.fields[fieldname], (fields.M2OField,
fields.ReferenceField)):
field_rec_name = fieldname + '.rec_name'
@@ -514,10 +521,11 @@ class Record(SignalEvent):
scope = values
for i in arg.split('.'):
if i not in scope:
- scope = None
break
scope = scope[i]
- res[arg] = scope
+ else:
+ res[arg] = scope
+ res['id'] = self.id
return res
def on_change(self, fieldname, attr):
@@ -526,8 +534,7 @@ class Record(SignalEvent):
args = self._get_on_change_args(attr)
try:
res = RPCExecute('model', self.model_name, 'on_change_' +
- fieldname, args, main_iteration=False,
- context=self.context_get())
+ fieldname, args, context=self.context_get())
except RPCException:
return
self.set_on_change(res)
@@ -558,8 +565,7 @@ class Record(SignalEvent):
if fieldnames:
try:
result = RPCExecute('model', self.model_name, 'on_change_with',
- values, list(fieldnames), main_iteration=False,
- context=self.context_get())
+ values, list(fieldnames), context=self.context_get())
except RPCException:
return
self.set_on_change(result)
@@ -570,7 +576,7 @@ class Record(SignalEvent):
try:
result = RPCExecute('model', self.model_name,
'on_change_with_' + fieldname, values,
- main_iteration=False, context=self.context_get())
+ context=self.context_get())
except RPCException:
return
self.group.fields[fieldname].set_on_change(self, result)
@@ -588,8 +594,7 @@ class Record(SignalEvent):
args = self._get_on_change_args(autocomplete)
try:
res = RPCExecute('model', self.model_name, 'autocomplete_' +
- fieldname, args, main_iteration=False,
- context=self.context_get())
+ fieldname, args, context=self.context_get())
except RPCException:
# ensure res is a list
res = []
@@ -604,7 +609,7 @@ class Record(SignalEvent):
'search_count', [
('resource', '=',
'%s,%s' % (self.model_name, self.id)),
- ], main_iteration=False)
+ ], context=self.context_get())
except RPCException:
return 0
return self.attachment_count
@@ -616,8 +621,5 @@ class Record(SignalEvent):
if hasattr(v, 'destroy'):
v.destroy()
super(Record, self).destroy()
- self.group = None
- self.value = None
- self.next = None
self.destroyed = True
pool.remove(self)
diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py
index 37923e3..de96ddc 100644
--- a/tryton/gui/window/view_form/screen/screen.py
+++ b/tryton/gui/window/view_form/screen/screen.py
@@ -24,7 +24,7 @@ from tryton.exceptions import TrytonServerError, TrytonServerUnavailable
from tryton.jsonrpc import JSONEncoder
from tryton.common.domain_parser import DomainParser
from tryton.common import RPCExecute, RPCException, MODELACCESS, \
- node_attributes, sur
+ node_attributes, sur, RPCContextReload
from tryton.action import Action
import tryton.rpc as rpc
@@ -46,8 +46,6 @@ class Screen(SignalEvent):
view_ids = []
if mode is None:
mode = ['tree', 'form']
- if context is None:
- context = {}
if views_preload is None:
views_preload = {}
if domain is None:
@@ -69,15 +67,17 @@ class Screen(SignalEvent):
self.size_limit = None
self.views_preload = views_preload
self.model_name = model_name
- self.context = context
self.views = []
self.view_ids = view_ids[:]
self.parent = None
self.parent_name = None
self.exclude_field = exclude_field
self.filter_widget = None
+ self.tree_states = collections.defaultdict(
+ lambda: collections.defaultdict(lambda: None))
+ self.tree_states_done = set()
self.__group = None
- self.new_group()
+ self.new_group(context or {})
self.__current_record = None
self.current_record = None
self.screen_container = ScreenContainer(tab_domain)
@@ -88,9 +88,6 @@ class Screen(SignalEvent):
self.fields_view_tree = None
self.order = order
self.view_to_load = []
- self.tree_states = collections.defaultdict(
- lambda: collections.defaultdict(lambda: None))
- self.tree_states_done = set()
self.domain_parser = None
self.pre_validate = False
self.view_to_load = mode[:]
@@ -126,11 +123,8 @@ class Screen(SignalEvent):
xml_fields = [node_attributes(node).get('name')
for node in root_node.childNodes
if node.nodeName == 'field']
- if hasattr(collections, 'OrderedDict'):
- odict = collections.OrderedDict
- else:
- odict = dict
- fields = odict((name, fields[name]) for name in xml_fields)
+ fields = collections.OrderedDict(
+ (name, fields[name]) for name in xml_fields)
for name, string, type_ in (
('id', _('ID'), 'integer'),
('create_uid', _('Creation User'), 'many2one'),
@@ -233,6 +227,10 @@ class Screen(SignalEvent):
self.load(ids)
return bool(ids)
+ @property
+ def context(self):
+ return self.group.context
+
def __get_group(self):
return self.__group
@@ -242,6 +240,7 @@ class Screen(SignalEvent):
self.group.signal_unconnect(self)
for name, field in self.group.fields.iteritems():
fields[name] = field.attrs
+ self.tree_states_done.clear()
self.__group = group
self.parent = group.parent
self.parent_name = group.parent_name
@@ -262,9 +261,10 @@ class Screen(SignalEvent):
group = property(__get_group, __set_group)
- def new_group(self):
+ def new_group(self, context=None):
+ context = context if context is not None else self.context
self.group = Group(self.model_name, {}, domain=self.domain,
- context=self.context, readonly=self.readonly)
+ context=context, readonly=self.readonly)
def _group_cleared(self, group, signal):
for view in self.views:
@@ -326,11 +326,6 @@ class Screen(SignalEvent):
for view in self.views:
view.destroy()
super(Screen, self).destroy()
- self.parent = None
- self.__group = None
- self.__current_record = None
- self.screen_container = None
- self.widget = None
def default_row_activate(self):
if (self.current_view.view_type == 'tree' and
@@ -376,7 +371,6 @@ class Screen(SignalEvent):
elif self.current_view.view_type == view_type:
break
self.screen_container.set(self.current_view.widget)
- self.current_view.cancel()
self.display()
self.set_cursor()
@@ -477,8 +471,6 @@ class Screen(SignalEvent):
self.current_record.cancel()
if self.current_record.id < 0:
self.remove()
- if self.current_view:
- self.current_view.cancel()
def save_current(self):
if not self.current_record:
@@ -499,11 +491,11 @@ class Screen(SignalEvent):
self.set_cursor()
self.current_view.display()
return False
- self.signal('record-saved')
if path and obj_id:
path = path[:-1] + ((path[-1][0], obj_id),)
self.current_record = self.group.get_by_path(path)
self.display()
+ self.signal('record-saved')
return obj_id
def __get_current_view(self):
@@ -550,20 +542,16 @@ class Screen(SignalEvent):
if written:
self.group.written(ids)
if self.parent:
- self.parent.reload()
+ self.parent.root_parent.reload()
self.display()
def unremove(self):
- records = self.current_view.selected_records()
+ records = self.selected_records
for record in records:
self.group.unremove(record)
def remove(self, delete=False, remove=False, force_remove=False):
- records = None
- if self.current_view.view_type == 'form' and self.current_record:
- records = [self.current_record]
- elif self.current_view.view_type == 'tree':
- records = self.current_view.selected_records()
+ records = self.selected_records
if not records:
return
if delete:
@@ -609,6 +597,15 @@ class Screen(SignalEvent):
self.display()
return True
+ def copy(self):
+ ids = [r.id for r in self.selected_records]
+ try:
+ new_ids = RPCExecute('model', self.model_name, 'copy', ids, {},
+ context=self.context)
+ except RPCException:
+ return
+ self.load(new_ids)
+
def set_tree_state(self):
view = self.current_view
if (not CONFIG['client.save_tree_state']
@@ -743,7 +740,7 @@ class Screen(SignalEvent):
record = group[idx]
break
parent = record.parent
- if not parent:
+ if not parent or record.model_name != parent.model_name:
break
next = parent.next.get(id(parent.group))
while not next:
@@ -808,7 +805,7 @@ class Screen(SignalEvent):
record = children[-1]
else:
parent = record.parent
- if parent:
+ if parent and record.model_name == parent.model_name:
record = parent
self.current_record = record
elif view.view_type == 'calendar':
@@ -837,8 +834,9 @@ class Screen(SignalEvent):
self.set_cursor(reset_view=False)
view.display()
- def sel_ids_get(self):
- return self.current_view.sel_ids_get()
+ @property
+ def selected_records(self):
+ return self.current_view.selected_records
def id_get(self):
if not self.current_record:
@@ -856,6 +854,23 @@ class Screen(SignalEvent):
self.current_record.on_change(fieldname, attr)
self.display()
+ def get_buttons(self):
+ 'Return active buttons for the current view'
+ def is_active(record, button):
+ states = record.expr_eval(button.attrs.get('states', {}))
+ return not (states.get('invisible') or states.get('readonly'))
+
+ if not self.selected_records:
+ return []
+
+ buttons = self.current_view.get_buttons()
+
+ for record in self.selected_records:
+ buttons = [b for b in buttons if is_active(record, b)]
+ if not buttons:
+ break
+ return buttons
+
def button(self, button):
'Execute button on the current record'
if button.get('confirm', False) and not sur(button['confirm']):
@@ -863,19 +878,52 @@ class Screen(SignalEvent):
record = self.current_record
if not record.save(force_reload=False):
return
- context = record.context_get()
+ ids = [r.id for r in self.selected_records]
try:
- action_id = RPCExecute('model', self.model_name, button['name'],
- [record.id], context=context)
+ action = RPCExecute('model', self.model_name, button['name'],
+ ids, context=self.context)
except RPCException:
- action_id = None
- if action_id:
- Action.execute(action_id, {
+ action = None
+ self.reload(ids, written=True)
+ if isinstance(action, basestring):
+ self.client_action(action)
+ elif action:
+ Action.execute(action, {
'model': self.model_name,
'id': record.id,
- 'ids': [record.id],
- }, context=context)
- self.reload([record.id], written=True)
+ 'ids': ids,
+ }, context=self.context)
+
+ def client_action(self, action):
+ access = MODELACCESS[self.model_name]
+ if action == 'new':
+ if access['create']:
+ self.new()
+ elif action == 'delete':
+ if access['delete']:
+ self.remove(delete=not self.parent,
+ force_remove=not self.parent)
+ elif action == 'remove':
+ if access['write'] and access['read'] and self.parent:
+ self.remove(remove=True)
+ elif action == 'copy':
+ if access['create']:
+ self.copy()
+ elif action == 'next':
+ self.display_next()
+ elif action == 'previous':
+ self.display_prev()
+ elif action == 'close':
+ from tryton.gui import Main
+ Main.get_main().sig_win_close()
+ elif action.startswith('switch'):
+ _, view_type = action.split(None, 1)
+ self.switch_view(view_type=view_type)
+ elif action == 'reload menu':
+ from tryton.gui import Main
+ RPCContextReload(Main.get_main().sig_win_menu)
+ elif action == 'reload context':
+ RPCContextReload()
def get_url(self):
query_string = []
diff --git a/tryton/gui/window/view_form/view/calendar_.py b/tryton/gui/window/view_form/view/calendar_.py
index ec56ba2..93d4c74 100644
--- a/tryton/gui/window/view_form/view/calendar_.py
+++ b/tryton/gui/window/view_form/view/calendar_.py
@@ -47,9 +47,6 @@ class ViewCalendar(ParserView):
# No need to load any record as nothing will be shown
return [('id', '=', -1)]
- def cancel(self):
- pass
-
def set_value(self):
pass
diff --git a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
index 0b2c334..bc799ab 100644
--- a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
+++ b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
@@ -21,9 +21,6 @@ class Calendar_(goocalendar.Calendar):
self.event_store = event_store
self.current_domain_period = self.get_displayed_period()
- def destroy(self):
- super(Calendar_, self).destroy()
-
def set_default_date(self, record, selected_date):
attrs = common.node_attributes(self.root_node)
dtstart = attrs.get('dtstart')
diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py
index a333b45..62a18f0 100644
--- a/tryton/gui/window/view_form/view/form.py
+++ b/tryton/gui/window/view_form/view/form.py
@@ -20,9 +20,8 @@ class ViewForm(ParserView):
self.view_type = 'form'
self.editable = True
- for widget in self.state_widgets:
- if isinstance(widget, gtk.Button):
- widget.connect('clicked', self.button_clicked)
+ for button in self.get_buttons():
+ button.connect('clicked', self.button_clicked)
# Force to display the first time it switches on a page
# This avoids glitch in position of widgets
@@ -62,17 +61,7 @@ class ViewForm(ParserView):
for widget_name in self.widgets.keys():
for widget in self.widgets[widget_name]:
widget.destroy()
- del self.widgets[widget_name]
self.widget.destroy()
- self.widget = None
- self.widgets = None
- self.screen = None
- self.state_widgets = None
-
- def cancel(self):
- for widgets in self.widgets.itervalues():
- for widget in widgets:
- widget.cancel()
def set_value(self, focused_widget=False):
record = self.screen.current_record
@@ -87,11 +76,7 @@ class ViewForm(ParserView):
and widget.widget.get_focus_child())):
widget.set_value(record, field)
- def sel_ids_get(self):
- if self.screen.current_record:
- return [self.screen.current_record.id]
- return []
-
+ @property
def selected_records(self):
if self.screen.current_record:
return [self.screen.current_record]
@@ -102,6 +87,9 @@ class ViewForm(ParserView):
return any(w.modified for widgets in self.widgets.itervalues()
for w in widgets)
+ def get_buttons(self):
+ return [b for b in self.state_widgets if isinstance(b, gtk.Button)]
+
def reset(self):
record = self.screen.current_record
if record:
@@ -142,16 +130,15 @@ class ViewForm(ParserView):
return True
def set_cursor(self, new=False, reset_view=True):
- if reset_view:
- for notebook in self.notebooks:
- notebook.set_current_page(0)
+ focus_widget = None
+ if reset_view or not self.widget.has_focus():
+ if reset_view:
+ for notebook in self.notebooks:
+ notebook.set_current_page(0)
if self.cursor_widget in self.widgets:
- self.widgets[self.cursor_widget][0].grab_focus()
- elif not self.widget.has_focus():
- self.widgets[self.cursor_widget][0].grab_focus()
+ focus_widget = self.widgets[self.cursor_widget][0]
record = self.screen.current_record
position = reduce(lambda x, y: x + len(y), self.widgets, 0)
- focus_widget = None
if record:
for name, widgets in self.widgets.iteritems():
for widget in widgets:
diff --git a/tryton/gui/window/view_form/view/form_gtk/binary.py b/tryton/gui/window/view_form/view/form_gtk/binary.py
index 2f6a4b4..26f704a 100644
--- a/tryton/gui/window/view_form/view/form_gtk/binary.py
+++ b/tryton/gui/window/view_form/view/form_gtk/binary.py
@@ -5,7 +5,7 @@ import gettext
import os
import tempfile
from tryton.common import common
-from tryton.common import file_selection, Tooltips, file_open
+from tryton.common import file_selection, Tooltips, file_open, slugify
from interface import WidgetInterface
_ = gettext.gettext
@@ -78,6 +78,8 @@ class Binary(WidgetInterface):
self.tooltips.set_tip(self.but_remove, _('Clear'))
self.widget.pack_start(self.but_remove, expand=False, fill=False)
+ self.last_open_file = None
+
self.tooltips.enable()
@property
@@ -108,7 +110,12 @@ class Binary(WidgetInterface):
return self.wid_size.grab_focus()
def sig_new(self, widget=None):
- filename = file_selection(_('Open...'))
+ filename = ''
+ if self.last_open_file:
+ last_id, last_filename = self.last_open_file
+ if last_id == self.record.id:
+ filename = last_filename
+ filename = file_selection(_('Open...'), filename=filename)
if filename and self.field:
self.field.set_client(self.record, open(filename, 'rb').read())
if self.filename_field:
@@ -119,17 +126,22 @@ class Binary(WidgetInterface):
if not self.filename_field:
return
dtemp = tempfile.mkdtemp(prefix='tryton_')
- filename = self.filename_field.get(self.record).replace(
- os.sep, '_').replace(os.altsep or os.sep, '_')
+ filename = self.filename_field.get(self.record)
if not filename:
return
+ root, ext = os.path.splitext(filename)
+ filename = ''.join([slugify(root), os.extsep, slugify(ext)])
file_path = os.path.join(dtemp, filename)
with open(file_path, 'wb') as fp:
- fp.write(self.field.get_data(self.record))
+ if hasattr(self.field, 'get_data'):
+ fp.write(self.field.get_data(self.record))
+ else:
+ fp.write(self.field.get(self.record))
root, type_ = os.path.splitext(filename)
if type_:
type_ = type_[1:]
file_open(file_path, type_)
+ self.last_open_file = (self.record.id, file_path)
def sig_save_as(self, widget=None):
filename = ''
@@ -139,7 +151,10 @@ class Binary(WidgetInterface):
action=gtk.FILE_CHOOSER_ACTION_SAVE)
if filename:
with open(filename, 'wb') as fp:
- fp.write(self.field.get_data(self.record))
+ if hasattr(self.field, 'get_data'):
+ fp.write(self.field.get_data(self.record))
+ else:
+ fp.write(self.field.get(self.record))
def sig_remove(self, widget=None):
self.field.set_client(self.record, False)
@@ -169,10 +184,14 @@ class Binary(WidgetInterface):
return False
if self.wid_text:
self.wid_text.set_text(self.filename_field.get(record) or '')
- self.wid_size.set_text(common.humanize(field.get_size(record) or 0))
+ if hasattr(field, 'get_size'):
+ size = field.get_size(record)
+ else:
+ size = len(field.get(record))
+ self.wid_size.set_text(common.humanize(size or 0))
if self.but_open:
- self.but_open.set_sensitive(bool(field.get_size(record)))
- self.but_save_as.set_sensitive(bool(field.get_size(record)))
+ self.but_open.set_sensitive(bool(size))
+ self.but_save_as.set_sensitive(bool(size))
return True
def set_value(self, record, field):
diff --git a/tryton/gui/window/view_form/view/form_gtk/calendar.py b/tryton/gui/window/view_form/view/form_gtk/calendar.py
index 7292c7e..bfab553 100644
--- a/tryton/gui/window/view_form/view/form_gtk/calendar.py
+++ b/tryton/gui/window/view_form/view/form_gtk/calendar.py
@@ -48,8 +48,7 @@ class Calendar(WidgetInterface):
return self.entry.grab_focus()
def set_value(self, record, field):
- field.set_client(record, self.entry.get_text())
- return True
+ field.set_client(record, self.get_value())
def get_value(self):
return self.entry.date_get(set_text=False)
@@ -89,8 +88,7 @@ class Time(Calendar):
def __init__(self, field_name, model_name, attrs=None):
super(Time, self).__init__(field_name, model_name, attrs=attrs)
- if hasattr(self.entry, 'set_icon_from_stock'):
- self.entry.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, None)
+ self.entry.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, None)
def get_format(self, record, field):
return field.time_format(record)
diff --git a/tryton/gui/window/view_form/view/form_gtk/char.py b/tryton/gui/window/view_form/view/form_gtk/char.py
index 50fbad4..ae25a91 100644
--- a/tryton/gui/window/view_form/view/form_gtk/char.py
+++ b/tryton/gui/window/view_form/view/form_gtk/char.py
@@ -6,6 +6,7 @@ import gobject
import gtk
from interface import WidgetInterface, TranslateMixin
from tryton.common import Tooltips
+from tryton.common.entry_position import manage_entry_position
_ = gettext.gettext
@@ -36,6 +37,7 @@ class Char(WidgetInterface, TranslateMixin):
focus_entry.connect('activate', self.sig_activate)
focus_entry.connect('focus-out-event', lambda x, y: self._focus_out())
focus_entry.connect('key-press-event', self.send_modified)
+ manage_entry_position(focus_entry)
expand, fill = True, True
if attrs.get('size'):
expand, fill = False, False
@@ -148,10 +150,10 @@ class Char(WidgetInterface, TranslateMixin):
self.widget.set_focus_chain([self.entry])
-class Sha(Char):
+class Password(Char):
def __init__(self, field_name, model_name, attrs=None):
- super(Sha, self).__init__(field_name, model_name, attrs=attrs)
+ super(Password, self).__init__(field_name, model_name, attrs=attrs)
self.entry.props.visibility = False
self.visibility_checkbox = gtk.CheckButton()
diff --git a/tryton/gui/window/view_form/view/form_gtk/dictionary.py b/tryton/gui/window/view_form/view/form_gtk/dictionary.py
index 42090b8..f958067 100644
--- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py
+++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py
@@ -104,8 +104,7 @@ class DictSelectionEntry(DictEntry):
widget.set_text_column(0)
widget.child.set_width_chars(width)
completion = gtk.EntryCompletion()
- if hasattr(completion, 'set_inline_selection'):
- completion.set_inline_selection(True)
+ completion.set_inline_selection(True)
completion.set_model(model)
widget.child.set_completion(completion)
completion.set_text_column(0)
diff --git a/tryton/gui/window/view_form/view/form_gtk/image.py b/tryton/gui/window/view_form/view/form_gtk/image.py
index dc30c03..ba5bdd0 100644
--- a/tryton/gui/window/view_form/view/form_gtk/image.py
+++ b/tryton/gui/window/view_form/view/form_gtk/image.py
@@ -5,7 +5,7 @@ import glib
import gettext
import os
import tempfile
-from tryton.common import file_selection, Tooltips, file_open
+from tryton.common import file_selection, Tooltips, file_open, slugify
from tryton.config import PIXMAPS_DIR
from interface import WidgetInterface
import urllib
@@ -141,8 +141,11 @@ class Image(WidgetInterface):
if not self.filename_field:
return
dtemp = tempfile.mkdtemp(prefix='tryton_')
- filename = self.filename_field.get(self.record).replace(
- os.sep, '_').replace(os.altsep or os.sep, '_')
+ filename = self.filename_field.get(self.record)
+ if not filename:
+ return
+ root, ext = os.path.splitext(filename)
+ filename = ''.join([slugify(root), os.extsep, slugify(ext)])
file_path = os.path.join(dtemp, filename)
with open(file_path, 'wb') as fp:
fp.write(self.field.get_data(self.record))
diff --git a/tryton/gui/window/view_form/view/form_gtk/interface.py b/tryton/gui/window/view_form/view/form_gtk/interface.py
index 5604e17..22ef029 100644
--- a/tryton/gui/window/view_form/view/form_gtk/interface.py
+++ b/tryton/gui/window/view_form/view/form_gtk/interface.py
@@ -67,10 +67,14 @@ class WidgetInterface(object):
def send_modified(self, *args):
def send(value):
+ if not self.widget.props.window:
+ return
if self.record and self.get_value() == value:
self.record.signal('record-modified')
def get_value():
+ if not self.widget.props.window:
+ return
gobject.timeout_add(300, send, self.get_value())
# Wait the current event is finished to retreive the value
gobject.idle_add(get_value)
@@ -146,10 +150,12 @@ class WidgetInterface(object):
self._readonly_set(self.attrs.get('readonly', True))
self.invisible_set(self.attrs.get('invisible', False))
return
- self._readonly_set(self.attrs.get('readonly',
- field.get_state_attrs(record).get('readonly', False)))
- if self.attrs.get('readonly',
- field.get_state_attrs(record).get('readonly', False)):
+ readonly = self.attrs.get('readonly',
+ field.get_state_attrs(record).get('readonly', False))
+ if self.view.screen.readonly:
+ readonly = True
+ self._readonly_set(readonly)
+ if readonly:
self.color_set('readonly')
elif not field.get_state_attrs(record).get('valid', True):
self.color_set('invalid')
@@ -163,9 +169,6 @@ class WidgetInterface(object):
def set_value(self, record, field):
pass
- def cancel(self):
- pass
-
class TranslateDialog(NoModal):
diff --git a/tryton/gui/window/view_form/view/form_gtk/many2many.py b/tryton/gui/window/view_form/view/form_gtk/many2many.py
index 0076610..fbc0dd6 100644
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py
@@ -130,8 +130,6 @@ class Many2Many(WidgetInterface):
def destroy(self):
self.screen.destroy()
- self.widget.destroy()
- del self.widget
def color_set(self, name):
super(Many2Many, self).color_set(name)
@@ -146,6 +144,9 @@ class Many2Many(WidgetInterface):
if not self.focus_out:
return
domain = self.field.domain_get(self.record)
+ add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
+ if add_remove:
+ domain = [domain, add_remove]
context = self.field.context_get(self.record)
value = self.wid_text.get_text()
@@ -185,13 +186,26 @@ class Many2Many(WidgetInterface):
self._sig_edit()
def _sig_edit(self):
- if self.screen.current_record:
- def callback(result):
- if result:
- self.screen.current_record.save()
- else:
- self.screen.current_record.cancel()
- WinForm(self.screen, callback)
+ if not self.screen.current_record:
+ return
+ # Create a new screen that is not linked to the parent otherwise on the
+ # save of the record will trigger the save of the parent
+ domain = self.field.domain_get(self.record)
+ add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
+ if add_remove:
+ domain = [domain, add_remove]
+ screen = Screen(self.attrs['relation'], domain=domain,
+ view_ids=self.attrs.get('view_ids', '').split(','),
+ mode=['form'], views_preload=self.attrs.get('views', {}),
+ readonly=self.attrs.get('readonly', False))
+ screen.load([self.screen.current_record.id])
+
+ def callback(result):
+ if result:
+ screen.current_record.save()
+ # Force a reload on next display
+ self.screen.current_record.cancel()
+ WinForm(screen, callback)
def _readonly_set(self, value):
self._readonly = value
@@ -233,7 +247,6 @@ class Many2Many(WidgetInterface):
return True
def set_value(self, record, field):
- self.screen.save_tree_state()
self.screen.current_view.set_value()
return True
@@ -263,6 +276,9 @@ class Many2Many(WidgetInterface):
elif index == 1:
model = self.attrs['relation']
domain = self.field.domain_get(self.record)
+ add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
+ if add_remove:
+ domain = [domain, add_remove]
context = self.field.context_get(self.record)
screen = Screen(model, domain, context=context, mode=['form'])
diff --git a/tryton/gui/window/view_form/view/form_gtk/many2one.py b/tryton/gui/window/view_form/view/form_gtk/many2one.py
index 0bf12fe..5b14610 100644
--- a/tryton/gui/window/view_form/view/form_gtk/many2one.py
+++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py
@@ -12,6 +12,7 @@ from tryton.config import CONFIG
from tryton.common.popup_menu import populate
from tryton.common import RPCExecute, RPCException
from tryton.common.completion import get_completion, update_completion
+from tryton.common.entry_position import manage_entry_position
_ = gettext.gettext
@@ -33,6 +34,7 @@ class Many2One(WidgetInterface):
self.wid_text.connect('focus-out-event',
lambda x, y: self._focus_out())
self.wid_text.connect_after('changed', self.sig_changed)
+ manage_entry_position(self.wid_text)
self.changed = True
self.focus_out = True
@@ -195,7 +197,8 @@ class Many2One(WidgetInterface):
context = self.field.context_get(self.record)
return Screen(self.get_model(), domain=domain, context=context,
mode=['form'], view_ids=self.attrs.get('view_ids', '').split(','),
- views_preload=self.attrs.get('views', {}), readonly=self._readonly)
+ views_preload=self.attrs.get('views', {}), readonly=self._readonly,
+ exclude_field=self.attrs.get('relation_field'))
def sig_new(self, *args):
model = self.get_model()
@@ -307,6 +310,8 @@ class Many2One(WidgetInterface):
value = self.field.get(self.record)
if self.has_target(value):
def clean():
+ if not self.wid_text.props.window:
+ return
text = self.wid_text.get_text()
position = self.wid_text.get_position()
self.field.set_client(self.record,
@@ -359,7 +364,7 @@ class Many2One(WidgetInterface):
if self.has_target(value):
# Delay filling of popup as it can take time
gobject.idle_add(populate, menu, self.get_model(),
- self.id_from_value(value))
+ self.id_from_value(value), '', self.field)
return True
def _completion_match_selected(self, completion, model, iter_):
@@ -377,7 +382,8 @@ class Many2One(WidgetInterface):
return
if not self.record:
return
- if self.field.get(self.record) is not None:
+ id_ = self.id_from_value(self.field.get(self.record))
+ if id_ is not None and id_ >= 0:
return
model = self.get_model()
update_completion(self.wid_text, self.record, self.field, model)
diff --git a/tryton/gui/window/view_form/view/form_gtk/multiselection.py b/tryton/gui/window/view_form/view/form_gtk/multiselection.py
new file mode 100644
index 0000000..0e44673
--- /dev/null
+++ b/tryton/gui/window/view_form/view/form_gtk/multiselection.py
@@ -0,0 +1,99 @@
+# 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 gtk
+import gobject
+
+from .interface import WidgetInterface
+from tryton.common.selection import SelectionMixin
+
+MOVEMENT_KEYS = {gtk.keysyms.Up, gtk.keysyms.Down, gtk.keysyms.space,
+ gtk.keysyms.Left, gtk.keysyms.KP_Left,
+ gtk.keysyms.Right, gtk.keysyms.KP_Right,
+ gtk.keysyms.Home, gtk.keysyms.KP_Home,
+ gtk.keysyms.End, gtk.keysyms.KP_End}
+
+
+class MultiSelection(WidgetInterface, SelectionMixin):
+
+ def __init__(self, field_name, model_name, attrs=None):
+ super(MultiSelection, self).__init__(field_name, model_name,
+ attrs=attrs)
+
+ self.widget = viewport = gtk.Viewport()
+ viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ scroll = gtk.ScrolledWindow()
+ scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ scroll.set_placement(gtk.CORNER_TOP_LEFT)
+ viewport.add(scroll)
+
+ self.model = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
+ self.tree = gtk.TreeView()
+ self.tree.set_model(self.model)
+ self.tree.set_search_column(1)
+ self.tree.connect('focus-out-event', lambda *a: self._focus_out())
+ self.tree.connect('button-press-event', self.__button_press)
+ self.tree.connect('key_press_event', self.__key_press)
+ selection = self.tree.get_selection()
+ selection.set_mode(gtk.SELECTION_MULTIPLE)
+ selection.connect('changed', self.send_modified)
+ scroll.add(self.tree)
+ name_column = gtk.TreeViewColumn(attrs.get('string', ''))
+ name_cell = gtk.CellRendererText()
+ name_column.pack_start(name_cell)
+ name_column.add_attribute(name_cell, 'text', 1)
+ self.tree.append_column(name_column)
+
+ self.nullable_widget = False
+ self.init_selection()
+ self.id2path = {}
+
+ def _color_widget(self):
+ return self.tree
+
+ def grab_focus(self):
+ self.tree.grab_focus()
+
+ @property
+ def modified(self):
+ if self.record and self.field:
+ group = set(r.id for r in self.field.get_client(self.record))
+ value = set(self.get_value())
+ return value != group
+ return False
+
+ def send_modified(self, *args):
+ if self.record:
+ self.record.signal('record-modified')
+
+ def get_value(self):
+ model, paths = self.tree.get_selection().get_selected_rows()
+ return [model[path][0] for path in paths]
+
+ def set_value(self, record, field):
+ field.set_client(record, self.get_value())
+
+ def display(self, record, field):
+ self.update_selection(record, field)
+ super(MultiSelection, self).display(record, field)
+ self.model.clear()
+ if field is None:
+ return
+ id2path = {}
+ for idx, (value, name) in enumerate(self.selection):
+ self.model.append((value, name))
+ id2path[value] = idx
+ selection = self.tree.get_selection()
+ selection.unselect_all()
+ group = field.get_client(record)
+ for element in group:
+ if (element not in group.record_removed
+ and element not in group.record_deleted):
+ selection.select_path(id2path[element.id])
+
+ def __button_press(self, treeview, event):
+ if event.button == 1:
+ event.state |= gtk.gdk.CONTROL_MASK
+
+ def __key_press(self, treeview, event):
+ if event.keyval in MOVEMENT_KEYS:
+ event.state |= gtk.gdk.CONTROL_MASK
diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py
index 36e29a7..ca9f02c 100644
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py
@@ -178,6 +178,7 @@ class One2Many(WidgetInterface):
view_ids=attrs.get('view_ids', '').split(','),
views_preload=attrs.get('views', {}),
row_activate=self._on_activate,
+ readonly=self.attrs.get('readonly', False),
exclude_field=attrs.get('relation_field', None))
self.screen.pre_validate = bool(int(attrs.get('pre_validate', 0)))
self.screen.signal_connect(self, 'record-message', self._sig_label)
@@ -321,8 +322,11 @@ class One2Many(WidgetInterface):
ctx = {}
ctx.update(self.field.context_get(self.record))
sequence = None
- if self.screen.current_view.view_type == 'tree':
- sequence = self.screen.current_view.widget_tree.sequence
+ for view in self.screen.views:
+ if view.view_type == 'tree':
+ sequence = view.widget_tree.sequence
+ if sequence:
+ break
def update_sequence():
if sequence:
@@ -465,7 +469,6 @@ class One2Many(WidgetInterface):
return True
def set_value(self, record, field):
- self.screen.save_tree_state()
self.screen.current_view.set_value()
if self.screen.modified(): # TODO check if required
record.modified_fields.setdefault(field.name)
diff --git a/tryton/gui/window/view_form/view/form_gtk/parser.py b/tryton/gui/window/view_form/view/form_gtk/parser.py
index 133a62d..9c8205e 100644
--- a/tryton/gui/window/view_form/view/form_gtk/parser.py
+++ b/tryton/gui/window/view_form/view/form_gtk/parser.py
@@ -522,7 +522,7 @@ from calendar import Calendar, DateTime, Time
from float import Float
from integer import Integer
from selection import Selection
-from char import Char, Sha
+from char import Char, Password
from float_time import FloatTime
from checkbox import CheckBox
from reference import Reference
@@ -537,6 +537,7 @@ from progressbar import ProgressBar
from one2one import One2One
from richtextbox import RichTextBox
from dictionary import DictWidget
+from multiselection import MultiSelection
WIDGETS_TYPE = {
@@ -549,7 +550,7 @@ WIDGETS_TYPE = {
'biginteger': (Integer, 1, False, False),
'selection': (Selection, 1, False, False),
'char': (Char, 1, False, False),
- 'sha': (Sha, 1, False, False),
+ 'password': (Password, 1, False, False),
'float_time': (FloatTime, 1, False, False),
'boolean': (CheckBox, 1, False, False),
'reference': (Reference, 1, False, False),
@@ -567,4 +568,5 @@ WIDGETS_TYPE = {
'one2one': (One2One, 1, False, False),
'richtext': (RichTextBox, 1, True, True),
'dict': (DictWidget, 1, False, False),
+ 'multiselection': (MultiSelection, 1, True, True),
}
diff --git a/tryton/gui/window/view_form/view/form_gtk/reference.py b/tryton/gui/window/view_form/view/form_gtk/reference.py
index 367dc5f..1a9381c 100644
--- a/tryton/gui/window/view_form/view/form_gtk/reference.py
+++ b/tryton/gui/window/view_form/view/form_gtk/reference.py
@@ -4,8 +4,7 @@ import gtk
import gettext
from many2one import Many2One
-from .selection import PopdownMixin
-from tryton.common.selection import SelectionMixin
+from tryton.common.selection import SelectionMixin, PopdownMixin
_ = gettext.gettext
@@ -32,9 +31,12 @@ class Reference(Many2One, SelectionMixin, PopdownMixin):
return self.widget_combo.grab_focus()
def get_model(self):
- child = self.widget_combo.get_child()
- res = child.get_text()
- return self._selection.get(res, False)
+ active = self.widget_combo.get_active()
+ if active < 0:
+ return ''
+ else:
+ model = self.widget_combo.get_model()
+ return model[active][1]
def _readonly_set(self, value):
super(Reference, self)._readonly_set(value)
@@ -116,15 +118,14 @@ class Reference(Many2One, SelectionMixin, PopdownMixin):
else:
model, value = None, None
super(Reference, self).set_text(value)
- child = self.widget_combo.get_child()
- reverse_selection = dict((v, k)
- for k, v in self._selection.iteritems())
- if model:
- child.set_text(reverse_selection[model])
- child.set_position(len(reverse_selection[model]))
- else:
- child.set_text('')
- child.set_position(0)
+
+ active = -1
+ combo_model = self.widget_combo.get_model()
+ for i, selection in enumerate(combo_model):
+ if selection[1] == model:
+ active = i
+ break
+ self.widget_combo.set_active(active)
def display(self, record, field):
self.update_selection(record, field)
diff --git a/tryton/gui/window/view_form/view/form_gtk/selection.py b/tryton/gui/window/view_form/view/form_gtk/selection.py
index 8eb24f4..09a977b 100644
--- a/tryton/gui/window/view_form/view/form_gtk/selection.py
+++ b/tryton/gui/window/view_form/view/form_gtk/selection.py
@@ -2,52 +2,10 @@
#this repository contains the full copyright notices and license terms.
import gtk
import gobject
-import math
-from interface import WidgetInterface
-from tryton.common.selection import SelectionMixin, selection_shortcuts
-
-
-class PopdownMixin(object):
-
- def __init__(self, *args, **kwargs):
- super(PopdownMixin, self).__init__()
- self._selection = {}
- def set_popdown(self, selection, entry):
- if not entry.child: # entry is destroyed
- return
- # Don't update popdown if not changed
- if (list(x[0] for x in entry.get_model() or [])
- == [x[1] for x in selection]):
- return
- model = gtk.ListStore(gobject.TYPE_STRING)
- self._selection.clear()
- for (value, name) in selection:
- name = str(name)
- self._selection[name] = value
- model.append((name,))
- entry.set_model(model)
- entry.set_text_column(0)
- completion = gtk.EntryCompletion()
- #Only available in PyGTK 2.6 and above.
- if hasattr(completion, 'set_inline_selection'):
- completion.set_inline_selection(True)
- completion.set_model(model)
- entry.child.set_completion(completion)
- if self._selection:
- pop = sorted((len(x) for x in self._selection), reverse=True)
- average = sum(pop) / len(pop)
- deviation = int(math.sqrt(sum((x - average) ** 2 for x in pop) /
- len(pop)))
- width = max(next((x for x in pop if x < (deviation * 4)), 10), 10)
- else:
- width = 10
- entry.child.set_width_chars(width)
- if self._selection:
- entry.child.set_max_length(
- max(len(x) for x in self._selection))
- completion.set_text_column(0)
- completion.connect('match-selected', lambda *a: self._focus_out())
+from interface import WidgetInterface
+from tryton.common.selection import SelectionMixin, selection_shortcuts, \
+ PopdownMixin
class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
@@ -63,20 +21,24 @@ class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
child.set_width_chars(10)
selection_shortcuts(self.entry)
- child.connect('key_press_event', self.sig_key_press)
- child.connect('activate', self.sig_activate)
- child.connect_after('focus-out-event', self.sig_activate)
- child.connect('changed', self.send_modified)
- self.entry.connect('notify::active', lambda *a: self._focus_out())
+ child.connect('activate', lambda *a: self._focus_out())
+ child.connect('focus-out-event', lambda *a: self._focus_out())
+ self.entry.connect('changed', self.changed)
self.widget.pack_start(self.entry)
self.widget.set_focus_chain([child])
- self._selection = {}
self.selection = attrs.get('selection', [])[:]
self.attrs = attrs
self.init_selection()
self.set_popdown(self.selection, self.entry)
+ def changed(self, combobox):
+ def focus_out():
+ if combobox.props.window:
+ self._focus_out()
+ # Must be deferred because it triggers a display of the form
+ gobject.idle_add(focus_out)
+
def grab_focus(self):
return self.entry.grab_focus()
@@ -90,30 +52,7 @@ class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
def get_value(self):
if not self.entry.child: # entry is destroyed
return
- text = self.entry.child.get_text()
- value = None
- if text:
- for txt, val in self._selection.items():
- if not val:
- continue
- if txt[:len(text)].lower() == text.lower():
- value = val
- if len(txt) == len(text):
- break
- if not value:
- for val, txt in self.inactive_selection:
- if txt == text:
- value = val
- break
- return value
-
- def sig_key_press(self, widget, event):
- self.send_modified()
-
- def sig_activate(self, widget, event=None):
- if not self.field:
- return
- self.field.set_client(self.record, self.get_value())
+ return self.get_popdown_value(self.entry)
@property
def modified(self):
@@ -122,47 +61,23 @@ class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
return False
def set_value(self, record, field):
- field.set_client(record, self.get_value())
-
- def _menu_sig_default_set(self, reset=False):
- self.set_value(self.record, self.field)
- super(Selection, self)._menu_sig_default_set(reset=reset)
+ value = self.get_value()
+ if 'relation' in self.attrs and value:
+ value = (value, self.entry.get_active_text())
+ field.set_client(record, value)
def display(self, record, field):
self.update_selection(record, field)
self.set_popdown(self.selection, self.entry)
- child = self.entry.child
if not field:
- child.set_text('')
- return False
+ self.entry.set_active(-1)
+ return
super(Selection, self).display(record, field)
value = field.get(record)
if isinstance(value, (list, tuple)):
# Compatibility with Many2One
value = value[0]
- if not value:
- child.set_text('')
- else:
- found = False
- for long_text, sel_value in self._selection.items():
- if str(sel_value) == str(value):
- child.set_text(long_text)
- found = True
- break
- if not found:
- for sel_value, long_text in self.selection:
- if str(sel_value) == str(value):
- self._selection[long_text] = sel_value
- model = self.entry.get_model()
- i = model.append()
- model.set(i, 0, long_text)
- child.set_text(long_text)
- found = True
- break
- if not found:
- text = self.get_inactive_selection(value)
- if text:
- child.set_text(text)
- found = True
- if not found:
- child.set_text('')
+
+ if not self.set_popdown_value(self.entry, value):
+ self.get_inactive_selection(value)
+ self.set_popdown_value(self.entry, value)
diff --git a/tryton/gui/window/view_form/view/graph.py b/tryton/gui/window/view_form/view/graph.py
index c91ff67..850d608 100644
--- a/tryton/gui/window/view_form/view/graph.py
+++ b/tryton/gui/window/view_form/view/graph.py
@@ -21,19 +21,10 @@ class ViewGraph(ParserView):
for widget in self.widgets.keys():
self.widgets[widget].destroy()
del self.widgets[widget]
- self.widget = None
- self.screen = None
- self.state_widgets = None
-
- def cancel(self):
- pass
def set_value(self):
pass
- def sel_ids_get(self):
- return []
-
def reset(self):
pass
diff --git a/tryton/gui/window/view_form/view/interface.py b/tryton/gui/window/view_form/view/interface.py
index dbee8d6..051beb5 100644
--- a/tryton/gui/window/view_form/view/interface.py
+++ b/tryton/gui/window/view_form/view/interface.py
@@ -32,9 +32,16 @@ class ParserView(object):
self.children_field = children_field
self.view_id = None
+ @property
+ def selected_records(self):
+ return []
+
def get_fields(self):
return self.children.keys()
+ def get_buttons(self):
+ return []
+
@property
def modified(self):
return False
diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py
index 1b61eaf..177a945 100644
--- a/tryton/gui/window/view_form/view/list.py
+++ b/tryton/gui/window/view_form/view/list.py
@@ -9,13 +9,10 @@ except ImportError:
import json
import locale
from interface import ParserView
-from tryton.action import Action
-from tryton.common import message
import gettext
from tryton.config import CONFIG
from tryton.common.cellrendererbutton import CellRendererButton
from tryton.common.cellrenderertoggle import CellRendererToggle
-from tryton.pyson import PYSONEncoder
from tryton.gui.window import Window
from tryton.common.popup_menu import populate
from tryton.common import RPCExecute, RPCException
@@ -61,9 +58,6 @@ class AdaptModelGroup(gtk.GenericTreeModel):
iter_ = self.get_iter(path)
self.row_has_child_toggled(path, iter_)
- def cancel(self):
- pass
-
def removed(self, group, record):
if (group is self.group
and (record.group is self.group
@@ -340,6 +334,10 @@ class ViewList(ParserView):
def get_fields(self):
return [col.name for col in self.widget_tree.get_columns() if col.name]
+ def get_buttons(self):
+ return [b for b in self.state_widgets
+ if isinstance(b.renderer, CellRendererButton)]
+
def on_keypress(self, widget, event):
if (event.keyval == gtk.keysyms.c
and event.state & gtk.gdk.CONTROL_MASK):
@@ -474,10 +472,21 @@ class ViewList(ParserView):
if col in columns:
idx = columns.index(col)
columns = columns[idx:]
- record = self.screen.current_record
- group = record.group
- idx = group.index(record)
+ if self.screen.current_record:
+ record = self.screen.current_record
+ group = record.group
+ idx = group.index(record)
+ else:
+ group = self.screen.group
+ idx = len(group)
+ default = None
for line in data:
+ if idx >= len(group):
+ record = group.new(default=False)
+ if default is None:
+ default = record.default_get()
+ record.set_default(default)
+ group.add(record)
record = group[idx]
for col, value in zip(columns, line):
cell = self.widget_tree.cells[col.name]
@@ -490,9 +499,6 @@ class ViewList(ParserView):
if not record.validate():
break
idx += 1
- if idx >= len(group):
- # TODO create new record
- break
self.screen.current_record = record
self.screen.display(set_cursor=True)
@@ -544,6 +550,15 @@ class ViewList(ParserView):
return
if not selection.data:
return
+
+ # Don't received if the treeview was editing because it breaks the
+ # internal state of the cursor.
+ cursor, column = treeview.get_cursor()
+ if column:
+ for renderer in column.get_cell_renderers():
+ if renderer.props.editing:
+ return
+
store = treeview.get_model()
try:
data = json.loads(selection.data)
@@ -635,7 +650,7 @@ class ViewList(ParserView):
if not model:
continue
label = field.attrs['string']
- populate(menu, model, record_id, title=label)
+ populate(menu, model, record_id, title=label, field=field)
menu.show_all()
# Delay filling of popup as it can take time
gobject.idle_add(pop, menu, group, record)
@@ -646,35 +661,6 @@ class ViewList(ParserView):
return True
return False
- def click_and_relate(self, action, value, path):
- data = {}
- context = {}
- act = action.copy()
- if not(value):
- message(_('You must select a record to use the relation!'))
- return False
- from tryton.gui.window.view_form.screen import Screen
- screen = Screen(self.screen.group.fields[
- path[1].name].attrs['relation'])
- screen.load([value])
- encoder = PYSONEncoder()
- act['domain'] = encoder.encode(screen.current_record.expr_eval(
- act.get('domain', [])))
- act['context'] = encoder.encode(screen.current_record.expr_eval(
- act.get('context', {})))
- data['model'] = self.screen.model_name
- data['id'] = value
- data['ids'] = [value]
- return Action._exec_action(act, data, context)
-
- def click_and_action(self, atype, value, path):
- return Action.exec_keyword(atype, {
- 'model': self.screen.group.fields[
- path[1].name].attrs['relation'],
- 'id': value or False,
- 'ids': [value],
- }, alwaysask=True)
-
def group_list_changed(self, group, signal):
if self.store is not None:
if signal[0] == 'record-added':
@@ -683,9 +669,6 @@ class ViewList(ParserView):
self.store.removed(group, signal[1])
self.display()
- def cancel(self):
- pass
-
def __str__(self):
return 'ViewList (%d)' % id(self)
@@ -722,9 +705,6 @@ class ViewList(ParserView):
def destroy(self):
self.save_width_height()
self.widget_tree.destroy()
- self.screen = None
- self.widget_tree = None
- self.widget = None
def __sig_switch(self, treeview, path, column):
if column._type == 'button':
@@ -800,6 +780,7 @@ class ViewList(ParserView):
# self.widget.set_model(self.store) could be removed if the store
# has not changed -> better ergonomy. To test
def display(self):
+ current_record = self.screen.current_record
if (self.reload
or not self.widget_tree.get_model()
or (self.screen.group !=
@@ -807,12 +788,16 @@ class ViewList(ParserView):
self.store = AdaptModelGroup(self.screen.group,
self.children_field)
self.widget_tree.set_model(self.store)
+ # __select_changed resets current_record to None
+ self.screen.current_record = current_record
+ if current_record:
+ selection = self.widget_tree.get_selection()
+ path = self.store.on_get_path(current_record)
+ selection.select_path(path)
self.reload = False
- if not self.screen.current_record:
- # Should find a simpler solution to do something like
- #self.widget.set_cursor(None,None,False)
- if self.store:
- self.widget_tree.set_model(self.store)
+ if not current_record:
+ selection = self.widget_tree.get_selection()
+ selection.unselect_all()
self.widget_tree.queue_draw()
if self.editable:
self.set_state()
@@ -827,7 +812,7 @@ class ViewList(ParserView):
field.state_set(record)
def update_children(self):
- ids = self.sel_ids_get()
+ selected_records = self.selected_records
for child in self.children:
value = 0
value_selected = 0
@@ -840,7 +825,7 @@ class ViewList(ParserView):
field_value = record.fields_get()[child_fieldname].get(record)
if field_value is not None:
value += field_value
- if record.id in ids or not ids:
+ if record in selected_records or not selected_records:
value_selected += field_value
if loaded:
@@ -870,17 +855,7 @@ class ViewList(ParserView):
if (current_path != path and path not in selected_path) or new:
self.widget_tree.set_cursor(path, focus_column, new)
- def sel_ids_get(self):
- def _func_sel_get(store, path, iter, ids):
- record = store.on_get_iter(path)
- if record and record.id >= 0:
- ids.append(record.id)
- ids = []
- sel = self.widget_tree.get_selection()
- if sel:
- sel.selected_foreach(_func_sel_get, ids)
- return ids
-
+ @property
def selected_records(self):
def _func_sel_get(store, path, iter, records):
records.append(store.on_get_iter(path))
diff --git a/tryton/gui/window/view_form/view/list_gtk/editabletree.py b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
index 50b660c..2a566f4 100644
--- a/tryton/gui/window/view_form/view/list_gtk/editabletree.py
+++ b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
@@ -104,6 +104,7 @@ class EditableTreeView(TreeView):
self.grab_focus()
if focus_column and (focus_column._type in ('boolean')):
start_editing = False
+ self.scroll_to_cell(path, focus_column, use_align=False)
super(EditableTreeView, self).set_cursor(path, focus_column,
start_editing)
diff --git a/tryton/gui/window/view_form/view/list_gtk/parser.py b/tryton/gui/window/view_form/view/list_gtk/parser.py
index 847f780..2dacf90 100644
--- a/tryton/gui/window/view_form/view/list_gtk/parser.py
+++ b/tryton/gui/window/view_form/view/list_gtk/parser.py
@@ -2,7 +2,6 @@
#this repository contains the full copyright notices and license terms.
import os
-import gobject
import tempfile
import gtk
import locale
@@ -18,7 +17,7 @@ from tryton.gui.window.win_form import WinForm
from tryton.gui.window.view_form.screen import Screen
import tryton.rpc as rpc
from tryton.common import COLORS, node_attributes, \
- file_selection, file_open
+ file_selection, file_open, slugify
import tryton.common as common
from tryton.common.cellrendererbutton import CellRendererButton
from tryton.common.cellrendererdate import CellRendererDate
@@ -34,7 +33,7 @@ from tryton.common.cellrendererclickablepixbuf import \
from tryton.translate import date_format
from tryton.common import RPCExecute, RPCException
from tryton.common.completion import get_completion, update_completion
-from tryton.common.selection import SelectionMixin
+from tryton.common.selection import SelectionMixin, PopdownMixin
_ = gettext.gettext
@@ -68,7 +67,7 @@ def sort_model(column, treeview, screen):
store = treeview.get_model()
unsaved_records = [x for x in store.group if x.id < 0]
search_string = screen.screen_container.get_text() or None
- if screen.search_count == len(store) or unsaved_records:
+ if screen.search_count == len(store) or unsaved_records or screen.parent:
ids = screen.search_filter(search_string=search_string, only_ids=True)
store.sort(ids)
else:
@@ -258,6 +257,7 @@ class ParserTree(ParserInterface):
string = node_attrs.get('string', _('Unknown'))
col = gtk.TreeViewColumn(string, renderer)
col.name = None
+ col.set_visible(not node_attrs.get('tree_invisible', False))
label = gtk.Label(string)
label.show()
@@ -606,6 +606,7 @@ class Binary(Char):
self.renderer.connect('open', self.open_binary)
self.renderer.connect('save', self.save_binary)
self.renderer.connect('clear', self.clear_binary)
+ self.last_open_file = None
def get_textual_value(self, record):
pass
@@ -617,12 +618,36 @@ class Binary(Char):
@realized
def setter(self, column, cell, store, iter):
record = store.get_value(iter, 0)
- size = record[self.field_name].get_size(record)
+ field = record[self.field_name]
+ if hasattr(field, 'get_size'):
+ size = field.get_size(record)
+ else:
+ size = len(field.get(record))
cell.set_property('size', common.humanize(size) if size else '')
+ states = ('invisible',)
+ if getattr(self.treeview, 'editable', False):
+ states = ('readonly', 'required', 'invisible')
+
+ field.state_set(record, states=states)
+ invisible = field.get_state_attrs(record).get('invisible', False)
+ cell.set_property('visible', not invisible)
+
+ if getattr(self.treeview, 'editable', False):
+ readonly = self.attrs.get('readonly',
+ field.get_state_attrs(record).get('readonly', False))
+ if invisible:
+ readonly = True
+ cell.set_property('editable', not readonly)
+
def new_binary(self, renderer, path):
- filename = file_selection(_('Open...'))
record, field = self._get_record_field(path)
+ filename = ''
+ if self.last_open_file:
+ last_id, last_filename = self.last_open_file
+ if last_id == record.id:
+ filename = last_filename
+ filename = file_selection(_('Open...'), filename=filename)
if filename:
field.set_client(record, open(filename, 'rb').read())
if self.filename:
@@ -635,17 +660,22 @@ class Binary(Char):
dtemp = tempfile.mkdtemp(prefix='tryton_')
record, field = self._get_record_field(path)
filename_field = record.group.fields.get(self.filename)
- filename = filename_field.get(record).replace(
- os.sep, '_').replace(os.altsep or os.sep, '_')
+ filename = filename_field.get(record)
if not filename:
return
+ root, ext = os.path.splitext(filename)
+ filename = ''.join([slugify(root), os.extsep, slugify(ext)])
file_path = os.path.join(dtemp, filename)
with open(file_path, 'wb') as fp:
- fp.write(field.get_data(record))
+ if hasattr(field, 'get_data'):
+ fp.write(field.get_data(record))
+ else:
+ fp.write(field.get(record))
root, type_ = os.path.splitext(filename)
if type_:
type_ = type_[1:]
file_open(file_path, type_)
+ self.last_open_file = (record.id, file_path)
def save_binary(self, renderer, path):
filename = ''
@@ -657,7 +687,10 @@ class Binary(Char):
action=gtk.FILE_CHOOSER_ACTION_SAVE)
if filename:
with open(filename, 'wb') as fp:
- fp.write(field.get_data(record))
+ if hasattr(field, 'get_data'):
+ fp.write(field.get_data(record))
+ else:
+ fp.write(field.get(record))
def clear_binary(self, renderer, path):
record, field = self._get_record_field(path)
@@ -889,40 +922,26 @@ class M2M(O2M):
context=context)
-class Selection(Char, SelectionMixin):
+class Selection(Char, SelectionMixin, PopdownMixin):
def __init__(self, *args):
super(Selection, self).__init__(*args)
self.renderer = CellRendererCombo()
self.renderer.connect('editing-started', self.editing_started)
self.init_selection()
- self.renderer.set_property('model', self.get_model(self.selection))
+ self.renderer.set_property('model', self.get_popdown_model(self.selection)[0])
self.renderer.set_property('text-column', 0)
- def get_model(self, selection):
- model = gtk.ListStore(gobject.TYPE_STRING)
- self._selection = {}
- lst = []
- for (value, name) in selection:
- name = str(name)
- lst.append(name)
- self._selection[name] = value
- i = model.append()
- model.set(i, 0, name)
- return model
-
def get_textual_value(self, record):
field = record[self.field_name]
self.update_selection(record, field)
- value = record[self.field_name].get(record)
+ value = field.get(record)
text = dict(self.selection).get(value, '')
if value and not text:
text = self.get_inactive_selection(value)
return text
def value_from_text(self, record, text, callback=None):
- field = record[self.field_name]
- field.set_client(record, self._selection.get(text, False))
if callback:
callback()
@@ -931,19 +950,26 @@ class Selection(Char, SelectionMixin):
store = self.treeview.get_model()
record = store.get_value(store.get_iter(path), 0)
field = record[self.field_name]
+
+ set_value = lambda *a: self.set_value(editable, record, field)
+ editable.child.connect('activate', set_value)
+ editable.child.connect('focus-out-event', set_value)
+ editable.connect('changed', set_value)
+
self.update_selection(record, field)
- model = self.get_model(self.selection)
- editable.set_model(model)
- # GTK 2.24 and above use a ComboBox instead of a ComboBoxEntry
- if hasattr(editable, 'set_text_column'):
- editable.set_text_column(0)
- completion = gtk.EntryCompletion()
- #Only available in PyGTK 2.6 and above.
- if hasattr(completion, 'set_inline_selection'):
- completion.set_inline_selection(True)
- completion.set_model(model)
- editable.get_child().set_completion(completion)
- completion.set_text_column(0)
+ self.set_popdown(self.selection, editable)
+
+ value = field.get(record)
+ if not self.set_popdown_value(editable, value):
+ self.get_inactive_selection(value)
+ self.set_popdown_value(editable, value)
+ return False
+
+ def set_value(self, editable, record, field):
+ value = self.get_popdown_value(editable)
+ if 'relation' in self.attrs and value:
+ value = (value, editable.get_active_text())
+ field.set_client(record, value)
return False
@@ -954,16 +980,17 @@ class Reference(Char, SelectionMixin):
super(Reference, self).__init__(field_name, model_name, treeview,
attrs=attrs, renderer=renderer)
self.init_selection()
- self._selection = dict(self.selection)
def get_textual_value(self, record):
- value = record[self.field_name].get_client(record)
+ field = record[self.field_name]
+ self.update_selection(record, field)
+ value = field.get_client(record)
if not value:
model, name = '', ''
else:
model, name = value
if model:
- return self._selection.get(model, model) + ',' + name
+ return dict(self.selection).get(model, model) + ',' + name
else:
return name
diff --git a/tryton/gui/window/view_form/view/screen_container.py b/tryton/gui/window/view_form/view/screen_container.py
index ec17416..295d7c4 100644
--- a/tryton/gui/window/view_form/view/screen_container.py
+++ b/tryton/gui/window/view_form/view/screen_container.py
@@ -2,9 +2,7 @@
#this repository contains the full copyright notices and license terms.
import gtk
import gettext
-import operator
import gobject
-import collections
import tryton.common as common
from tryton.common.domain_parser import quote
@@ -63,6 +61,8 @@ class Selection(gtk.ScrolledWindow):
def get_value(self):
values = []
model, paths = self.treeview.get_selection().get_selected_rows()
+ if not paths:
+ return
for path in paths:
iter_ = model.get_iter(path)
values.append(model.get_value(iter_, 0))
@@ -102,11 +102,9 @@ class ScreenContainer(object):
self.completion = gtk.EntryCompletion()
self.completion.set_model(gtk.ListStore(str))
self.completion.set_text_column(0)
- self.completion.props.inline_completion = True
- if hasattr(self.completion.props, 'inline_selection'):
- self.completion.props.inline_selection = True
- if hasattr(self.completion.props, 'popup_set_width'):
- self.completion.props.popup_set_width = False
+ self.completion.props.inline_selection = True
+ self.completion.props.popup_set_width = False
+ self.completion.set_match_func(lambda *a: True)
self.completion.connect('match-selected', self.match_selected)
self.search_entry.connect('activate', self.activate)
self.search_entry.set_completion(self.completion)
@@ -350,6 +348,8 @@ class ScreenContainer(object):
def match_selected(self, completion, model, iter):
def callback():
+ if not self.search_entry.props.window:
+ return
self.update()
self.search_entry.emit('changed')
gobject.idle_add(callback)
@@ -366,8 +366,12 @@ class ScreenContainer(object):
self.search_entry.grab_focus()
def key_press(self, widget, event):
- gobject.idle_add(self.update)
- gobject.idle_add(self.bookmark_match)
+ def keypress():
+ if not self.search_entry.props.window:
+ return
+ self.update()
+ self.bookmark_match()
+ gobject.idle_add(keypress)
def icon_press(self, widget, icon_pos, event):
if icon_pos == 1:
@@ -406,13 +410,13 @@ class ScreenContainer(object):
text = ''
for label, entry in self.search_table.fields:
if isinstance(entry, gtk.ComboBox):
- value = quote(entry.get_active_text())
+ value = quote(entry.get_active_text()) or None
elif isinstance(entry, (Dates, Selection)):
value = entry.get_value()
else:
- value = quote(entry.get_text())
- if value:
- text += label + ' ' + value + ' '
+ value = quote(entry.get_text()) or None
+ if value is not None:
+ text += quote(label) + ': ' + value + ' '
self.set_text(text)
self.last_search_text = self.get_text()
self.do_search()
@@ -430,16 +434,11 @@ class ScreenContainer(object):
self.search_window.set_title('Tryton')
self.search_window.set_icon(TRYTON_ICON)
self.search_window.set_decorated(False)
- if hasattr(self.search_window, 'set_deletable'):
- self.search_window.set_deletable(False)
+ self.search_window.set_deletable(False)
self.search_window.connect('key-press-event', key_press)
vbox = gtk.VBox()
fields = [f for f in self.screen.domain_parser.fields.itervalues()
if f.get('searchable', True)]
- if (not hasattr(collections, 'OrderedDict')
- or not isinstance(self.screen.domain_parser.fields,
- collections.OrderedDict)):
- fields.sort(key=operator.itemgetter('string'))
self.search_table = gtk.Table(rows=len(fields), columns=2)
self.search_table.set_homogeneous(False)
self.search_table.set_border_width(5)
@@ -481,11 +480,12 @@ class ScreenContainer(object):
entry.connect('activate', lambda *a: search())
self.search_table.attach(entry, 1, 2, i, i + 1,
yoptions=yoptions)
- self.search_table.fields.append((field['string'] + ':', entry))
+ self.search_table.fields.append((field['string'], entry))
scrolled = gtk.ScrolledWindow()
scrolled.add_with_viewport(self.search_table)
scrolled.set_shadow_type(gtk.SHADOW_NONE)
+ scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
vbox.pack_start(scrolled, expand=True, fill=True)
find_button = gtk.Button(_('Find'))
find_button.connect('clicked', lambda *a: search())
@@ -500,26 +500,19 @@ class ScreenContainer(object):
self.search_window.add(vbox)
vbox.show_all()
- # Disable scrolling:
- scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
- # See what changed:
- new_size = self.search_window.size_request()
- # Reenable scrolling:
- scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ new_size = map(sum, zip(self.search_table.size_request(),
+ scrolled.size_request()))
self.search_window.set_default_size(*new_size)
parent = button.get_toplevel()
- button_x, button_y = button.translate_coordinates(parent,
- *parent.window.get_origin())
+ button_x, button_y = button.translate_coordinates(parent, 0, 0)
button_allocation = button.get_allocation()
- # Resize the window to not be out of the screen
+ # Resize the window to not be out of the parent
width, height = self.search_window.get_default_size()
- screen = self.search_window.get_screen()
- screen_width = screen.get_width()
- screen_height = screen.get_height()
- delta_width = screen_width - (button_x + width)
- delta_height = screen_height - (button_y + button_allocation.height
+ allocation = parent.get_allocation()
+ delta_width = allocation.width - (button_x + width)
+ delta_height = allocation.height - (button_y + button_allocation.height
+ height)
if delta_width < 0:
width += delta_width
@@ -528,8 +521,8 @@ class ScreenContainer(object):
self.search_window.resize(width, height)
# Move the window under the button
- self.search_window.move(button_x,
- button_y + button_allocation.height)
+ x, y = button.window.get_origin()
+ self.search_window.move(x, y + button_allocation.height)
from tryton.gui.main import Main
page = Main.get_main().get_page()
diff --git a/tryton/gui/window/win_export.py b/tryton/gui/window/win_export.py
index 636df5e..c70164e 100644
--- a/tryton/gui/window/win_export.py
+++ b/tryton/gui/window/win_export.py
@@ -241,7 +241,8 @@ class WinExport(NoModal):
def _get_fields(self, model):
try:
- return RPCExecute('model', model, 'fields_get', None)
+ return RPCExecute('model', model, 'fields_get', None,
+ context=self.context)
except RPCException:
return ''
@@ -279,17 +280,19 @@ class WinExport(NoModal):
def fill_predefwin(self):
try:
export_ids = RPCExecute('model', 'ir.export', 'search',
- [('resource', '=', self.model)], 0, None, None)
+ [('resource', '=', self.model)], 0, None, None,
+ context=self.context)
except RPCException:
return
try:
exports = RPCExecute('model', 'ir.export', 'read', export_ids,
- None)
+ None, context=self.context)
except RPCException:
return
try:
lines = RPCExecute('model', 'ir.export.line', 'read',
- sum((x['export_fields'] for x in exports), []), None)
+ sum((x['export_fields'] for x in exports), []), None,
+ context=self.context)
except RPCException:
return
id2lines = {}
@@ -319,7 +322,7 @@ class WinExport(NoModal):
'export_fields': [('create', [{
'name': x,
} for x in fields])],
- }])
+ }], context=self.context)
except RPCException:
return
self.predef_model.append((
@@ -337,7 +340,8 @@ class WinExport(NoModal):
return None
export_id = model.get_value(i, 0)
try:
- RPCExecute('model', 'ir.export', 'delete', [export_id])
+ RPCExecute('model', 'ir.export', 'delete', [export_id],
+ context=self.context)
except RPCException:
return
for i in range(len(self.predef_model)):
@@ -389,8 +393,11 @@ class WinExport(NoModal):
iter = self.model2.iter_next(iter)
action = self.wid_action.get_active()
self.destroy()
- result = self.datas_read(self.ids, self.model, fields,
- context=self.context)
+ try:
+ result = RPCExecute('model', self.model, 'export_data',
+ self.ids, fields, context=self.context)
+ except RPCException:
+ result = []
if action == 0:
fileno, fname = tempfile.mkstemp('.csv', 'tryton_')
@@ -434,11 +441,3 @@ class WinExport(NoModal):
common.warning(_("Operation failed!\nError message:\n%s")
% (exception.faultCode,), _('Error'))
return False
-
- def datas_read(self, ids, model, fields, context=None):
- try:
- datas = RPCExecute('model', model, 'export_data', ids, fields,
- context=context)
- except RPCException:
- return []
- return datas
diff --git a/tryton/gui/window/win_form.py b/tryton/gui/window/win_form.py
index 314bff6..dcfef89 100644
--- a/tryton/gui/window/win_form.py
+++ b/tryton/gui/window/win_form.py
@@ -38,14 +38,15 @@ class WinForm(NoModal):
self.win.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
self.win.set_icon(TRYTON_ICON)
self.win.set_has_separator(False)
- if hasattr(self.win, 'set_deletable'):
- self.win.set_deletable(False)
+ self.win.set_deletable(False)
self.win.connect('close', self.close)
self.win.connect('response', self.response)
self.accel_group = gtk.AccelGroup()
self.win.add_accel_group(self.accel_group)
+ readonly = self.screen.readonly or self.screen.group.readonly
+
self.but_ok = None
self.but_new = None
@@ -85,6 +86,7 @@ class WinForm(NoModal):
title.set_label(self.screen.current_view.title)
title.set_padding(20, 3)
title.set_alignment(0.0, 0.5)
+ title.set_size_request(0, -1) # Allow overflow
title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000"))
title.show()
@@ -140,7 +142,7 @@ class WinForm(NoModal):
self.but_add.add(img_add)
self.but_add.set_relief(gtk.RELIEF_NONE)
hbox.pack_start(self.but_add, expand=False, fill=False)
- if not access['read']:
+ if not access['read'] or readonly:
self.but_add.set_sensitive(False)
self.but_remove = gtk.Button()
@@ -153,7 +155,7 @@ class WinForm(NoModal):
self.but_remove.add(img_remove)
self.but_remove.set_relief(gtk.RELIEF_NONE)
hbox.pack_start(self.but_remove, expand=False, fill=False)
- if not access['read']:
+ if not access['read'] or readonly:
self.but_remove.set_sensitive(False)
hbox.pack_start(gtk.VSeparator(), expand=False, fill=True)
@@ -167,7 +169,7 @@ class WinForm(NoModal):
self.but_new.add(img_new)
self.but_new.set_relief(gtk.RELIEF_NONE)
hbox.pack_start(self.but_new, expand=False, fill=False)
- if not access['create']:
+ if not access['create'] or readonly:
self.but_new.set_sensitive(False)
self.but_del = gtk.Button()
@@ -180,7 +182,7 @@ class WinForm(NoModal):
self.but_del.add(img_del)
self.but_del.set_relief(gtk.RELIEF_NONE)
hbox.pack_start(self.but_del, expand=False, fill=False)
- if not access['delete']:
+ if not access['delete'] or readonly:
self.but_del.set_sensitive(False)
self.but_undel = gtk.Button()
@@ -194,6 +196,8 @@ class WinForm(NoModal):
self.but_undel.add(img_undel)
self.but_undel.set_relief(gtk.RELIEF_NONE)
hbox.pack_start(self.but_undel, expand=False, fill=False)
+ if not access['delete'] or readonly:
+ self.but_undel.set_sensitive(False)
hbox.pack_start(gtk.VSeparator(), expand=False, fill=True)
@@ -355,9 +359,10 @@ class WinForm(NoModal):
def _sig_label(self, screen, signal_data):
name = '_'
+ access = common.MODELACCESS[screen.model_name]
+ readonly = screen.group.readonly
if signal_data[0] >= 1:
name = str(signal_data[0])
- self.but_del.set_sensitive(True)
if self.domain is not None:
self.but_remove.set_sensitive(True)
if signal_data[0] < signal_data[1]:
@@ -368,8 +373,9 @@ class WinForm(NoModal):
self.but_pre.set_sensitive(True)
else:
self.but_pre.set_sensitive(False)
- self.but_del.set_sensitive(True)
- self.but_undel.set_sensitive(True)
+ if access['delete'] and not readonly:
+ self.but_del.set_sensitive(True)
+ self.but_undel.set_sensitive(True)
else:
self.but_del.set_sensitive(False)
self.but_undel.set_sensitive(False)
@@ -395,7 +401,9 @@ class WinForm(NoModal):
validate = False
cancel_responses = (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT)
self.screen.current_view.set_value()
+ readonly = self.screen.group.readonly
if (response_id not in cancel_responses
+ and not readonly
and self.screen.current_record is not None):
validate = self.screen.current_record.validate(
self.screen.current_view.get_fields())
@@ -421,6 +429,7 @@ class WinForm(NoModal):
self.new()
return
if (self.screen.current_record
+ and not readonly
and response_id in cancel_responses):
if (self.screen.current_record.id < 0
or self.save_current):
diff --git a/tryton/gui/window/win_import.py b/tryton/gui/window/win_import.py
index dfd4fed..ede68c7 100644
--- a/tryton/gui/window/win_import.py
+++ b/tryton/gui/window/win_import.py
@@ -15,7 +15,7 @@ _ = gettext.gettext
class WinImport(NoModal):
"Window import"
- def __init__(self, model):
+ def __init__(self, model, context):
super(WinImport, self).__init__()
self.dialog = gtk.Dialog(title=_("Import from CSV"),
parent=self.parent, flags=gtk.DIALOG_DESTROY_WITH_PARENT)
@@ -166,6 +166,7 @@ class WinImport(NoModal):
self.dialog.vbox.pack_start(dialog_vbox)
self.model = model
+ self.context = context
self.fields_data = {}
self.import_csv_file.set_current_folder(CONFIG['client.default_path'])
@@ -230,7 +231,8 @@ class WinImport(NoModal):
def _get_fields(self, model):
try:
- return RPCExecute('model', model, 'fields_get', None)
+ return RPCExecute('model', model, 'fields_get', None,
+ context=self.context)
except RPCException:
return ''
@@ -337,11 +339,9 @@ class WinImport(NoModal):
}
self.destroy()
if csv_data['fname']:
- return self.import_csv(csv_data, fields, self.model)
- return False
+ self.import_csv(csv_data, fields, self.model)
else:
self.destroy()
- return False
def import_csv(self, csv_data, fields, model):
# TODO: make it works with references
@@ -356,20 +356,11 @@ class WinImport(NoModal):
datas.append([x.decode(csv_data['combo']).encode('utf-8')
for x in line])
try:
- res = RPCExecute('model', model, 'import_data', fields, datas)
+ count = RPCExecute('model', model, 'import_data', fields, datas,
+ context=self.context)
except RPCException:
- return False
- if res[0] >= 0:
- if res[0] == 1:
- common.message(_('%d record imported!') % res[0])
- else:
- common.message(_('%d records imported!') % res[0])
+ return
+ if count == 1:
+ common.message(_('%d record imported!') % count)
else:
- buf = ''
- for key, val in res[1].items():
- buf += ('\t%s: %s\n' % (str(key), str(val)))
- common.error(_('Importation Error!'),
- _('Error importing record %(record)s\n'
- '%(error_title)s\n\n%(traceback)s') %
- {'record': buf, 'error_title': res[2], 'traceback': res[3]})
- return True
+ common.message(_('%d records imported!') % count)
diff --git a/tryton/gui/window/win_search.py b/tryton/gui/window/win_search.py
index cc5e1cb..c8d2026 100644
--- a/tryton/gui/window/win_search.py
+++ b/tryton/gui/window/win_search.py
@@ -107,7 +107,7 @@ class WinSearch(NoModal):
def response(self, win, response_id):
res = None
if response_id == gtk.RESPONSE_OK:
- res = self.screen.sel_ids_get()
+ res = [r.id for r in self.screen.selected_records]
elif response_id == gtk.RESPONSE_APPLY:
self.screen.search_filter(self.screen.screen_container.get_text())
return
diff --git a/tryton/gui/window/window.py b/tryton/gui/window/window.py
index 41dfc02..c073c6b 100644
--- a/tryton/gui/window/window.py
+++ b/tryton/gui/window/window.py
@@ -21,7 +21,7 @@ class Window(object):
@staticmethod
def create(view_ids, model, res_id=False, domain=None,
context=None, order=None, mode=None, name=False, limit=None,
- auto_refresh=False, search_value=None, icon=None, tab_domain=None):
+ search_value=None, icon=None, tab_domain=None):
from tryton.gui import Main
if context is None:
context = {}
@@ -30,12 +30,11 @@ class Window(object):
from form import Form
win = Form(model, res_id, domain, order=order, mode=mode,
view_ids=(view_ids or []), context=context, name=name,
- limit=limit, auto_refresh=auto_refresh,
- search_value=search_value, tab_domain=tab_domain)
+ limit=limit, search_value=search_value, tab_domain=tab_domain)
else:
from board import Board
win = Board(model, view_ids and view_ids[0] or None,
- context=context, name=name, auto_refresh=auto_refresh)
+ context=context, name=name)
win.icon = icon
Main.get_main().win_add(win, hide_current=Window.hide_current,
allow_similar=Window.allow_similar)
diff --git a/tryton/gui/window/wizard.py b/tryton/gui/window/wizard.py
index 869ec06..42d625e 100644
--- a/tryton/gui/window/wizard.py
+++ b/tryton/gui/window/wizard.py
@@ -3,17 +3,16 @@
import gtk
import pango
import gettext
-import socket
from tryton.signal_event import SignalEvent
-import tryton.rpc as rpc
import tryton.common as common
from tryton.gui.window.view_form.screen import Screen
from tryton.gui import Main
-from tryton.exceptions import TrytonServerError, TrytonServerUnavailable
+from tryton.exceptions import TrytonServerError
from tryton.gui.window.nomodal import NoModal
from tryton.common.button import Button
-from tryton.common import RPCExecute, RPCException, TRYTON_ICON
+from tryton.common import RPCExecute, RPCException
+from tryton.common import TRYTON_ICON
_ = gettext.gettext
@@ -28,6 +27,7 @@ class Wizard(object):
self.id = None
self.ids = None
self.action = None
+ self.action_id = None
self.direct_print = False
self.email_print = False
self.email = False
@@ -46,6 +46,7 @@ class Wizard(object):
def run(self, action, data, direct_print=False, email_print=False,
email=None, context=None):
self.action = action
+ self.action_id = data.get('action_id')
self.id = data.get('id')
self.ids = data.get('ids')
self.model = data.get('model')
@@ -53,84 +54,77 @@ class Wizard(object):
self.email_print = email_print
self.email = email
self.context = context
- try:
- result = RPCExecute('wizard', action, 'create')
- except RPCException:
- return
- self.session_id, self.start_state, self.end_state = result
- self.state = self.start_state
- self.process()
+
+ def callback(result):
+ try:
+ result = result()
+ except RPCException:
+ return
+ self.session_id, self.start_state, self.end_state = result
+ self.state = self.start_state
+ self.process()
+ RPCExecute('wizard', action, 'create', callback=callback)
def process(self):
from tryton.action import Action
if self.__processing or self.__waiting_response:
return
- try:
- self.__processing = True
- while self.state != self.end_state:
- ctx = self.context.copy()
- ctx['active_id'] = self.id
- ctx['active_ids'] = self.ids
- ctx['active_model'] = self.model
- if self.screen:
- data = {
- self.screen_state: self.screen.get_on_change_value(),
- }
- else:
- data = {}
- try:
- result = RPCExecute('wizard', self.action, 'execute',
- self.session_id, data, self.state, context=ctx)
- except RPCException, rpc_exception:
- if (not isinstance(rpc_exception.exception,
- TrytonServerError)
- or not self.screen):
- self.state = self.end_state
- break
-
- if 'view' in result:
- self.clean()
- view = result['view']
- self.update(view['fields_view'], view['defaults'],
- view['buttons'])
- self.screen_state = view['state']
- self.__waiting_response = True
- else:
+ self.__processing = True
+
+ ctx = self.context.copy()
+ ctx['active_id'] = self.id
+ ctx['active_ids'] = self.ids
+ ctx['active_model'] = self.model
+ ctx['action_id'] = self.action_id
+ if self.screen:
+ data = {
+ self.screen_state: self.screen.get_on_change_value(),
+ }
+ else:
+ data = {}
+
+ def callback(result):
+ try:
+ result = result()
+ except RPCException, rpc_exception:
+ if (not isinstance(rpc_exception.exception,
+ TrytonServerError)
+ or not self.screen):
self.state = self.end_state
+ self.end()
+ self.__processing = False
+ return
+
+ if 'view' in result:
+ self.clean()
+ view = result['view']
+ self.update(view['fields_view'], view['defaults'],
+ view['buttons'])
+ self.screen_state = view['state']
+ self.__waiting_response = True
+ else:
+ self.state = self.end_state
- if 'actions' in result:
- sensitive_widget = self.widget.get_toplevel()
- if not 'view' in result:
- self.end()
- for action in result['actions']:
- Action._exec_action(*action, context=ctx)
- if (not 'view' in result
- or (action[0]['type'] == 'ir.action.wizard'
- and not sensitive_widget.props.sensitive)):
- return
- if self.__waiting_response:
- break
+ def execute_actions():
+ for action in result.get('actions', []):
+ Action._exec_action(*action, context=self.context.copy())
if self.state == self.end_state:
- self.end()
- finally:
+ self.end(execute_actions)
+ else:
+ execute_actions()
self.__processing = False
+ RPCExecute('wizard', self.action, 'execute', self.session_id, data,
+ self.state, context=ctx, callback=callback)
+
def destroy(self):
if self.screen:
self.screen.destroy()
- del self.screen
- del self.widget
-
- def end(self):
- try:
- RPCExecute('wizard', self.action, 'delete', self.session_id,
- process_exception=False)
- if self.action == 'ir.module.module.config_wizard':
- rpc.context_reload()
- Main.get_main().sig_win_menu()
- except (TrytonServerError, socket.error, TrytonServerUnavailable):
- pass
+
+ def end(self, callback=None):
+ RPCExecute('wizard', self.action, 'delete', self.session_id,
+ process_exception=False, callback=callback)
def clean(self):
for widget in self.widget.get_children():
@@ -177,6 +171,7 @@ class Wizard(object):
title.set_label(self.screen.current_view.title)
title.set_padding(20, 4)
title.set_alignment(0.0, 0.5)
+ title.set_size_request(0, -1) # Allow overflow
title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000"))
title.show()
@@ -275,8 +270,8 @@ class WizardForm(Wizard, SignalEvent):
self.toolbar_box.remove(toolbar)
super(WizardForm, self).destroy()
- def end(self):
- super(WizardForm, self).end()
+ def end(self, callback=None):
+ super(WizardForm, self).end(callback=callback)
Main.get_main()._win_del(self.widget)
def set_cursor(self):
@@ -295,11 +290,9 @@ class WizardDialog(Wizard, NoModal):
gtk.DIALOG_DESTROY_WITH_PARENT)
self.dia.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
self.dia.set_icon(TRYTON_ICON)
- if hasattr(self.dia, 'set_deletable'):
- self.dia.set_deletable(False)
+ self.dia.set_deletable(False)
self.dia.connect('close', self.close)
self.dia.connect('response', self.response)
- self.dia.connect('state-changed', self.state_changed)
self.accel_group = gtk.AccelGroup()
self.dia.add_accel_group(self.accel_group)
@@ -334,7 +327,7 @@ class WizardDialog(Wizard, NoModal):
self.dia.show()
common.center_window(self.dia, self.parent, self.sensible_widget)
- def destroy(self):
+ def destroy(self, action=None):
super(WizardDialog, self).destroy()
self.dia.destroy()
NoModal.destroy(self)
@@ -348,7 +341,7 @@ class WizardDialog(Wizard, NoModal):
dialog = self.page.dialogs[-1]
else:
dialog = self.page
- if (hasattr(dialog, 'screen')
+ if (getattr(dialog, 'screen', None)
and dialog.screen.current_record
and self.sensible_widget != main.window):
if dialog.screen.model_name == self.model:
@@ -357,13 +350,20 @@ class WizardDialog(Wizard, NoModal):
# Wizard run from a children record so reload parent record
ids = [dialog.screen.current_record.id]
dialog.screen.reload(ids, written=True)
+ if action:
+ dialog.screen.client_action(action)
- def end(self):
- super(WizardDialog, self).end()
- self.destroy()
+ def end(self, callback=None):
+ def end_callback(action):
+ self.destroy(action=action())
+ if callback:
+ callback()
+ super(WizardDialog, self).end(callback=end_callback)
def close(self, widget, event=None):
widget.emit_stop_by_name('close')
+ if self.end_state in self.states:
+ self.states[self.end_state].clicked()
return True
def show(self):
@@ -371,7 +371,3 @@ class WizardDialog(Wizard, NoModal):
def hide(self):
self.dia.hide()
-
- def state_changed(self, widget, state):
- if self.dia.props.sensitive and state == gtk.STATE_INSENSITIVE:
- self.process()
diff --git a/tryton/jsonrpc.py b/tryton/jsonrpc.py
index 5bbe927..9e259e2 100644
--- a/tryton/jsonrpc.py
+++ b/tryton/jsonrpc.py
@@ -13,11 +13,13 @@ import socket
import gzip
import StringIO
import hashlib
-import sys
import base64
+import threading
+from functools import partial
+from contextlib import contextmanager
__all__ = ["ResponseError", "Fault", "ProtocolError", "Transport",
- "ServerProxy"]
+ "ServerProxy", "ServerPool"]
CONNECT_TIMEOUT = 5
DEFAULT_TIMEOUT = None
@@ -47,11 +49,12 @@ def object_hook(dct):
if '__class__' in dct:
if dct['__class__'] == 'datetime':
return datetime.datetime(dct['year'], dct['month'], dct['day'],
- dct['hour'], dct['minute'], dct['second'])
+ dct['hour'], dct['minute'], dct['second'], dct['microsecond'])
elif dct['__class__'] == 'date':
return datetime.date(dct['year'], dct['month'], dct['day'])
elif dct['__class__'] == 'time':
- return datetime.time(dct['hour'], dct['minute'], dct['second'])
+ return datetime.time(dct['hour'], dct['minute'], dct['second'],
+ dct['microsecond'])
elif dct['__class__'] == 'buffer':
return buffer(base64.decodestring(dct['base64']))
elif dct['__class__'] == 'Decimal':
@@ -76,6 +79,7 @@ class JSONEncoder(json.JSONEncoder):
'hour': obj.hour,
'minute': obj.minute,
'second': obj.second,
+ 'microsecond': obj.microsecond,
}
return {'__class__': 'date',
'year': obj.year,
@@ -87,6 +91,7 @@ class JSONEncoder(json.JSONEncoder):
'hour': obj.hour,
'minute': obj.minute,
'second': obj.second,
+ 'microsecond': obj.microsecond,
}
elif isinstance(obj, buffer):
return {'__class__': 'buffer',
@@ -228,52 +233,6 @@ class Transport(xmlrpclib.Transport, xmlrpclib.SafeTransport):
self._connection[1].sock.settimeout(DEFAULT_TIMEOUT)
return self._connection[1]
- if sys.version_info[:2] <= (2, 6):
-
- def request(self, host, handler, request_body, verbose=0):
- h = self.make_connection(host)
- if verbose:
- h.set_debuglevel(1)
-
- self.send_request(h, handler, request_body)
- self.send_host(h, host)
- self.send_user_agent(h)
- self.send_content(h, request_body)
-
- response = h.getresponse()
-
- if response.status != 200:
- raise ProtocolError(
- host + handler,
- response.status,
- response.reason,
- response.getheaders()
- )
-
- self.verbose = verbose
-
- try:
- sock = h._conn.sock
- except AttributeError:
- sock = None
-
- if response.getheader("Content-Encoding", "") == "gzip":
- response = gzip.GzipFile(mode="rb",
- fileobj=StringIO.StringIO(response.read()))
- sock = None
-
- return self._parse_response(response, sock)
-
- def send_request(self, connection, handler, request_body):
- xmlrpclib.Transport.send_request(self, connection, handler,
- request_body)
- connection.putheader("Accept-Encoding", "gzip")
-
- def close(self):
- if self._connection[1]:
- self._connection[1].close()
- self._connection = (None, None)
-
class ServerProxy(xmlrpclib.ServerProxy):
__id = 0
@@ -331,3 +290,43 @@ class ServerProxy(xmlrpclib.ServerProxy):
def ssl(self):
return isinstance(self.__transport.make_connection(self.__host),
httplib.HTTPSConnection)
+
+
+class ServerPool(object):
+
+ def __init__(self, *args, **kwargs):
+ self.ServerProxy = partial(ServerProxy, *args, **kwargs)
+ self._lock = threading.Lock()
+ self._pool = []
+ self._used = {}
+
+ def getconn(self):
+ with self._lock:
+ if self._pool:
+ conn = self._pool.pop()
+ else:
+ conn = self.ServerProxy()
+ self._used[id(conn)] = conn
+ return conn
+
+ def putconn(self, conn):
+ with self._lock:
+ self._pool.append(conn)
+ del self._used[id(conn)]
+
+ def close(self):
+ with self._lock:
+ for conn in self._pool + self._used.values():
+ conn.close()
+
+ @property
+ def ssl(self):
+ for conn in self._pool + self._used.values():
+ return conn.ssl
+ return False
+
+ @contextmanager
+ def __call__(self):
+ conn = self.getconn()
+ yield conn
+ self.putconn(conn)
diff --git a/tryton/pyson.py b/tryton/pyson.py
index 5b7bf46..9f637a5 100644
--- a/tryton/pyson.py
+++ b/tryton/pyson.py
@@ -537,6 +537,31 @@ class DateTime(Date):
)
+class Len(PYSON):
+
+ def __init__(self, value):
+ super(Len, self).__init__()
+ if isinstance(value, PYSON):
+ assert value.types().issubset(set([dict, list, str])), \
+ 'value must be a dict or a list or a string'
+ else:
+ assert type(value) in [dict, list, str], \
+ 'value must be a dict or list or a string'
+ self._value = value
+
+ def pyson(self):
+ return {
+ '__class__': 'Len',
+ 'v': self._value,
+ }
+
+ def types(self):
+ return set([int, long])
+
+ @staticmethod
+ def eval(dct, context):
+ return len(dct['v'])
+
CONTEXT = {
'Eval': Eval,
'Not': Not,
@@ -551,4 +576,5 @@ CONTEXT = {
'In': In,
'Date': Date,
'DateTime': DateTime,
+ 'Len': Len,
}
diff --git a/tryton/rpc.py b/tryton/rpc.py
index 4e06a8b..b0af1a4 100644
--- a/tryton/rpc.py
+++ b/tryton/rpc.py
@@ -4,9 +4,8 @@ import httplib
import logging
import socket
import os
-from threading import Semaphore
from functools import partial
-from tryton.jsonrpc import ServerProxy, Fault
+from tryton.jsonrpc import ServerProxy, ServerPool, Fault
from tryton.fingerprints import Fingerprints
from tryton.config import get_config_dir
from tryton.ipc import Server as IPCServer
@@ -24,8 +23,6 @@ CONTEXT = {}
_VIEW_CACHE = {}
_TOOLBAR_CACHE = {}
_KEYWORD_CACHE = {}
-TIMEZONE = 'utc'
-_SEMAPHORE = Semaphore()
_CA_CERTS = os.path.join(get_config_dir(), 'ca_certs')
if not os.path.isfile(_CA_CERTS):
_CA_CERTS = None
@@ -33,6 +30,8 @@ _FINGERPRINTS = Fingerprints()
ServerProxy = partial(ServerProxy, fingerprints=_FINGERPRINTS,
ca_certs=_CA_CERTS)
+ServerPool = partial(ServerPool, fingerprints=_FINGERPRINTS,
+ ca_certs=_CA_CERTS)
def db_list(host, port):
@@ -79,17 +78,14 @@ def login(username, password, host, port, database):
_TOOLBAR_CACHE = {}
_KEYWORD_CACHE = {}
try:
- _SEMAPHORE.acquire()
- try:
- if CONNECTION is not None:
- CONNECTION.close()
- CONNECTION = ServerProxy(host, port, database)
- logging.getLogger(__name__).info('common.db.login(%s, %s)' %
- (username, 'x' * 10))
- result = CONNECTION.common.db.login(username, password)
- logging.getLogger(__name__).debug(repr(result))
- finally:
- _SEMAPHORE.release()
+ if CONNECTION is not None:
+ CONNECTION.close()
+ CONNECTION = ServerPool(host, port, database)
+ logging.getLogger(__name__).info('common.db.login(%s, %s)' %
+ (username, 'x' * 10))
+ with CONNECTION() as conn:
+ result = conn.common.db.login(username, password)
+ logging.getLogger(__name__).debug(repr(result))
except socket.error:
_USER = None
_SESSION = ''
@@ -114,15 +110,13 @@ def logout():
if IPCServer.instance:
IPCServer.instance.stop()
if CONNECTION is not None:
- _SEMAPHORE.acquire()
try:
logging.getLogger(__name__).info('common.db.logout(%s, %s)' %
(_USER, _SESSION))
- CONNECTION.common.db.logout(_USER, _SESSION)
+ with CONNECTION() as conn:
+ conn.common.db.logout(_USER, _SESSION)
except (Fault, socket.error, httplib.CannotSendRequest):
pass
- finally:
- _SEMAPHORE.release()
CONNECTION.close()
CONNECTION = None
_USER = None
@@ -136,24 +130,6 @@ def logout():
_KEYWORD_CACHE = {}
-def context_reload():
- global CONTEXT, TIMEZONE, _HOST, _PORT
- try:
- context = execute('model', 'res.user', 'get_preferences', True, {})
- except Fault:
- return
- CONTEXT = {}
- for i in context:
- value = context[i]
- CONTEXT[i] = value
- if i == 'timezone':
- try:
- connection = ServerProxy(_HOST, _PORT)
- TIMEZONE = connection.common.server.timezone_get(None, None)
- except Fault:
- pass
-
-
def _execute(blocking, *args):
global CONNECTION, _USER, _SESSION
if CONNECTION is None:
@@ -174,18 +150,14 @@ def _execute(blocking, *args):
key = str(args)
if key in _KEYWORD_CACHE:
return _KEYWORD_CACHE[key]
- res = _SEMAPHORE.acquire(blocking)
- if not res:
- return
try:
name = '.'.join(args[:3])
args = (_USER, _SESSION) + args[3:]
logging.getLogger(__name__).info('%s%s' % (name, args))
- result = getattr(CONNECTION, name)(*args)
+ with CONNECTION() as conn:
+ result = getattr(conn, name)(*args)
except (httplib.CannotSendRequest, socket.error), exception:
raise TrytonServerUnavailable(*exception.args)
- finally:
- _SEMAPHORE.release()
if not CONFIG['dev']:
if key and method == 'fields_view_get':
_VIEW_CACHE[key] = result
diff --git a/tryton/translate.py b/tryton/translate.py
index 909b0e8..7073039 100644
--- a/tryton/translate.py
+++ b/tryton/translate.py
@@ -5,7 +5,7 @@ import os
import locale
import gettext
from version import PACKAGE
-from tryton.config import CURRENT_DIR, PREFIX
+from tryton.config import CURRENT_DIR
import logging
import gtk
import sys
@@ -157,7 +157,7 @@ def setlang(lang=None, locale_dict=None):
"Set language"
locale_dir = os.path.join(CURRENT_DIR, 'share/locale')
if not os.path.isdir(locale_dir):
- locale_dir = os.path.join(PREFIX, 'share/locale')
+ locale_dir = os.path.join(sys.prefix, 'share/locale')
if lang:
encoding = locale.getdefaultlocale()[1]
if not encoding:
diff --git a/tryton/version.py b/tryton/version.py
index 0158ec3..e46e927 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -1,6 +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.
PACKAGE = "tryton"
-VERSION = "3.0.3"
+VERSION = "3.2.0"
LICENSE = "GPL-3"
WEBSITE = "http://www.tryton.org/"
--
tryton-client
More information about the tryton-debian-vcs
mailing list