tryton 7.4.7__py3-none-any.whl → 7.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of tryton might be problematic. Click here for more details.

Files changed (122) hide show
  1. tryton/__init__.py +1 -1
  2. tryton/bus.py +113 -69
  3. tryton/chat.py +179 -0
  4. tryton/client.py +7 -0
  5. tryton/common/__init__.py +15 -11
  6. tryton/common/button.py +1 -1
  7. tryton/common/cellrendererfloat.py +1 -1
  8. tryton/common/cellrenderertext.py +2 -2
  9. tryton/common/common.py +91 -19
  10. tryton/common/domain_parser.py +8 -6
  11. tryton/common/environment.py +2 -2
  12. tryton/common/number_entry.py +12 -6
  13. tryton/common/selection.py +1 -1
  14. tryton/data/locale/bg/LC_MESSAGES/tryton.mo +0 -0
  15. tryton/data/locale/bg/LC_MESSAGES/tryton.po +26 -16
  16. tryton/data/locale/ca/LC_MESSAGES/tryton.mo +0 -0
  17. tryton/data/locale/ca/LC_MESSAGES/tryton.po +29 -18
  18. tryton/data/locale/cs/LC_MESSAGES/tryton.mo +0 -0
  19. tryton/data/locale/cs/LC_MESSAGES/tryton.po +28 -16
  20. tryton/data/locale/de/LC_MESSAGES/tryton.mo +0 -0
  21. tryton/data/locale/de/LC_MESSAGES/tryton.po +27 -18
  22. tryton/data/locale/es/LC_MESSAGES/tryton.mo +0 -0
  23. tryton/data/locale/es/LC_MESSAGES/tryton.po +25 -16
  24. tryton/data/locale/es_419/LC_MESSAGES/tryton.mo +0 -0
  25. tryton/data/locale/es_419/LC_MESSAGES/tryton.po +26 -16
  26. tryton/data/locale/et/LC_MESSAGES/tryton.mo +0 -0
  27. tryton/data/locale/et/LC_MESSAGES/tryton.po +28 -18
  28. tryton/data/locale/fa/LC_MESSAGES/tryton.mo +0 -0
  29. tryton/data/locale/fa/LC_MESSAGES/tryton.po +28 -18
  30. tryton/data/locale/fi/LC_MESSAGES/tryton.mo +0 -0
  31. tryton/data/locale/fi/LC_MESSAGES/tryton.po +25 -16
  32. tryton/data/locale/fr/LC_MESSAGES/tryton.mo +0 -0
  33. tryton/data/locale/fr/LC_MESSAGES/tryton.po +25 -16
  34. tryton/data/locale/hu/LC_MESSAGES/tryton.mo +0 -0
  35. tryton/data/locale/hu/LC_MESSAGES/tryton.po +28 -18
  36. tryton/data/locale/id/LC_MESSAGES/tryton.mo +0 -0
  37. tryton/data/locale/id/LC_MESSAGES/tryton.po +23 -16
  38. tryton/data/locale/it/LC_MESSAGES/tryton.mo +0 -0
  39. tryton/data/locale/it/LC_MESSAGES/tryton.po +29 -18
  40. tryton/data/locale/ja_JP/LC_MESSAGES/tryton.mo +0 -0
  41. tryton/data/locale/lo/LC_MESSAGES/tryton.mo +0 -0
  42. tryton/data/locale/lo/LC_MESSAGES/tryton.po +26 -18
  43. tryton/data/locale/lt/LC_MESSAGES/tryton.mo +0 -0
  44. tryton/data/locale/lt/LC_MESSAGES/tryton.po +30 -18
  45. tryton/data/locale/nl/LC_MESSAGES/tryton.mo +0 -0
  46. tryton/data/locale/nl/LC_MESSAGES/tryton.po +25 -16
  47. tryton/data/locale/pl/LC_MESSAGES/tryton.mo +0 -0
  48. tryton/data/locale/pl/LC_MESSAGES/tryton.po +31 -18
  49. tryton/data/locale/pt/LC_MESSAGES/tryton.mo +0 -0
  50. tryton/data/locale/pt/LC_MESSAGES/tryton.po +148 -177
  51. tryton/data/locale/ro/LC_MESSAGES/tryton.mo +0 -0
  52. tryton/data/locale/ro/LC_MESSAGES/tryton.po +32 -19
  53. tryton/data/locale/ru/LC_MESSAGES/tryton.mo +0 -0
  54. tryton/data/locale/ru/LC_MESSAGES/tryton.po +28 -16
  55. tryton/data/locale/sl/LC_MESSAGES/tryton.mo +0 -0
  56. tryton/data/locale/sl/LC_MESSAGES/tryton.po +33 -18
  57. tryton/data/locale/tr/LC_MESSAGES/tryton.mo +0 -0
  58. tryton/data/locale/tr/LC_MESSAGES/tryton.po +25 -16
  59. tryton/data/locale/uk/LC_MESSAGES/tryton.mo +0 -0
  60. tryton/data/locale/uk/LC_MESSAGES/tryton.po +31 -18
  61. tryton/data/locale/zh_CN/LC_MESSAGES/tryton.mo +0 -0
  62. tryton/data/locale/zh_CN/LC_MESSAGES/tryton.po +27 -18
  63. tryton/data/pixmaps/tryton/tryton-chat.svg +1 -0
  64. tryton/data/pixmaps/tryton/tryton-note.svg +1 -4
  65. tryton/gui/window/attachment.py +2 -2
  66. tryton/gui/window/board.py +1 -1
  67. tryton/gui/window/form.py +57 -10
  68. tryton/gui/window/note.py +2 -2
  69. tryton/gui/window/tabcontent.py +8 -1
  70. tryton/gui/window/view_board/action.py +1 -1
  71. tryton/gui/window/view_form/model/field.py +38 -29
  72. tryton/gui/window/view_form/model/group.py +4 -4
  73. tryton/gui/window/view_form/model/record.py +17 -4
  74. tryton/gui/window/view_form/screen/screen.py +25 -7
  75. tryton/gui/window/view_form/view/calendar_gtk/calendar_.py +1 -1
  76. tryton/gui/window/view_form/view/calendar_gtk/toolbar.py +1 -1
  77. tryton/gui/window/view_form/view/form.py +2 -1
  78. tryton/gui/window/view_form/view/form_gtk/binary.py +3 -3
  79. tryton/gui/window/view_form/view/form_gtk/calendar_.py +4 -4
  80. tryton/gui/window/view_form/view/form_gtk/char.py +42 -5
  81. tryton/gui/window/view_form/view/form_gtk/checkbox.py +3 -3
  82. tryton/gui/window/view_form/view/form_gtk/dictionary.py +53 -15
  83. tryton/gui/window/view_form/view/form_gtk/float.py +3 -7
  84. tryton/gui/window/view_form/view/form_gtk/image.py +4 -4
  85. tryton/gui/window/view_form/view/form_gtk/integer.py +1 -1
  86. tryton/gui/window/view_form/view/form_gtk/many2many.py +3 -4
  87. tryton/gui/window/view_form/view/form_gtk/many2one.py +2 -2
  88. tryton/gui/window/view_form/view/form_gtk/multiselection.py +3 -3
  89. tryton/gui/window/view_form/view/form_gtk/one2many.py +11 -8
  90. tryton/gui/window/view_form/view/form_gtk/progressbar.py +2 -2
  91. tryton/gui/window/view_form/view/form_gtk/pyson.py +3 -3
  92. tryton/gui/window/view_form/view/form_gtk/reference.py +4 -4
  93. tryton/gui/window/view_form/view/form_gtk/richtextbox.py +5 -5
  94. tryton/gui/window/view_form/view/form_gtk/selection.py +3 -3
  95. tryton/gui/window/view_form/view/form_gtk/state_widget.py +8 -6
  96. tryton/gui/window/view_form/view/form_gtk/textbox.py +4 -4
  97. tryton/gui/window/view_form/view/form_gtk/timedelta.py +3 -3
  98. tryton/gui/window/view_form/view/form_gtk/url.py +2 -2
  99. tryton/gui/window/view_form/view/form_gtk/widget.py +1 -1
  100. tryton/gui/window/view_form/view/graph_gtk/bar.py +7 -7
  101. tryton/gui/window/view_form/view/graph_gtk/graph.py +2 -2
  102. tryton/gui/window/view_form/view/graph_gtk/line.py +5 -5
  103. tryton/gui/window/view_form/view/graph_gtk/pie.py +2 -2
  104. tryton/gui/window/view_form/view/list.py +110 -52
  105. tryton/gui/window/view_form/view/list_gtk/editabletree.py +2 -2
  106. tryton/gui/window/view_form/view/list_gtk/widget.py +22 -20
  107. tryton/gui/window/view_form/view/screen_container.py +13 -1
  108. tryton/gui/window/win_csv.py +2 -2
  109. tryton/gui/window/win_export.py +9 -7
  110. tryton/gui/window/win_form.py +73 -39
  111. tryton/gui/window/win_import.py +5 -6
  112. tryton/gui/window/wizard.py +11 -11
  113. tryton/jsonrpc.py +2 -2
  114. tryton/plugins/__init__.py +0 -1
  115. tryton/pyson.py +18 -18
  116. tryton/rpc.py +7 -5
  117. {tryton-7.4.7.dist-info → tryton-7.6.0.dist-info}/METADATA +8 -7
  118. {tryton-7.4.7.dist-info → tryton-7.6.0.dist-info}/RECORD +122 -120
  119. {tryton-7.4.7.dist-info → tryton-7.6.0.dist-info}/WHEEL +1 -1
  120. {tryton-7.4.7.data → tryton-7.6.0.data}/scripts/tryton +0 -0
  121. {tryton-7.4.7.dist-info → tryton-7.6.0.dist-info/licenses}/LICENSE +0 -0
  122. {tryton-7.4.7.dist-info → tryton-7.6.0.dist-info}/top_level.txt +0 -0
tryton/common/common.py CHANGED
@@ -10,6 +10,7 @@ import logging
10
10
  import os
11
11
  import platform
12
12
  import re
13
+ import ssl
13
14
  import subprocess
14
15
  import unicodedata
15
16
  import xml.etree.ElementTree as ET
@@ -32,24 +33,18 @@ import urllib.error
32
33
  import urllib.parse
33
34
  import urllib.request
34
35
  import webbrowser
36
+ import zipfile
35
37
  from functools import wraps
36
38
  from string import Template
37
39
  from threading import Lock, Thread
38
40
 
41
+ from gi.repository import Gdk, GdkPixbuf, Gio, GLib, GObject, Gtk
42
+
39
43
  import tryton.rpc as rpc
40
44
  import tryton.translate as translate
45
+ from tryton import __version__
41
46
  from tryton.cache import CacheDict
42
47
  from tryton.config import CONFIG, PIXMAPS_DIR, SOUNDS_DIR, TRYTON_ICON
43
-
44
- try:
45
- import ssl
46
- except ImportError:
47
- ssl = None
48
- import zipfile
49
-
50
- from gi.repository import Gdk, GdkPixbuf, Gio, GLib, GObject, Gtk
51
-
52
- from tryton import __version__
53
48
  from tryton.exceptions import TrytonError, TrytonServerError
54
49
  from tryton.pyson import PYSONEncoder
55
50
 
@@ -238,6 +233,49 @@ class IconFactory:
238
233
  IconFactory.load_local_icons()
239
234
 
240
235
 
236
+ class SolidColorFactory:
237
+ _pixbufs = defaultdict(dict)
238
+
239
+ @staticmethod
240
+ def _create_pixbuf(red, green, blue, width, height):
241
+ pixbuf = GdkPixbuf.Pixbuf.new(
242
+ GdkPixbuf.Colorspace.RGB, False, 8, width, height)
243
+ pixels = bytearray(pixbuf.get_pixels())
244
+ rowstride = pixbuf.get_rowstride()
245
+ for y in range(height):
246
+ for x in range(width):
247
+ offset = y * rowstride + x * 3
248
+ pixels[offset:offset + 3] = bytes([red, green, blue])
249
+ return GdkPixbuf.Pixbuf.new_from_data(
250
+ pixels, GdkPixbuf.Colorspace.RGB, False, 8, width, height,
251
+ rowstride)
252
+
253
+ @staticmethod
254
+ def hex_to_rgb(color):
255
+ color = color.lstrip('#')
256
+ if len(color) == 3:
257
+ color = ''.join([c * 2 for c in color])
258
+ if len(color) != 6:
259
+ return
260
+ try:
261
+ red = int(color[0:2], 16)
262
+ green = int(color[2:4], 16)
263
+ blue = int(color[4:6], 16)
264
+ except ValueError:
265
+ return
266
+ return red, green, blue
267
+
268
+ @classmethod
269
+ def get_pixbuf(cls, color, width=16, height=16):
270
+ rgb = cls.hex_to_rgb(color)
271
+ if rgb is None:
272
+ return
273
+ if rgb not in cls._pixbufs[width, height]:
274
+ cls._pixbufs[width, height][rgb] = cls._create_pixbuf(
275
+ *rgb, width, height)
276
+ return cls._pixbufs[width, height][rgb]
277
+
278
+
241
279
  class ModelAccess(object):
242
280
 
243
281
  batchnum = 100
@@ -341,6 +379,25 @@ class ModelNotification:
341
379
  MODELNOTIFICATION = ModelNotification()
342
380
 
343
381
 
382
+ class ModelChat:
383
+ _models = None
384
+
385
+ def load_names(self):
386
+ try:
387
+ self._models = dict(rpc.execute(
388
+ 'model', 'ir.chat.channel', 'get_models', rpc.CONTEXT))
389
+ except TrytonServerError:
390
+ pass
391
+
392
+ def __contains__(self, model):
393
+ if self._models is None:
394
+ self.load_names()
395
+ return model in self._models
396
+
397
+
398
+ MODELCHAT = ModelChat()
399
+
400
+
344
401
  class ViewSearch(object):
345
402
  searches = {}
346
403
 
@@ -349,7 +406,7 @@ class ViewSearch(object):
349
406
  def default(self, obj):
350
407
  if isinstance(obj, Decimal):
351
408
  return float(obj)
352
- return super(Encoder, self).default(obj)
409
+ return super().default(obj)
353
410
  self.encoder = Encoder()
354
411
 
355
412
  def load_searches(self):
@@ -721,7 +778,7 @@ class MessageDialog(UniqueDialog):
721
778
  return dialog
722
779
 
723
780
  def __call__(self, message, *args, **kwargs):
724
- return super(MessageDialog, self).__call__(message, *args, **kwargs)
781
+ return super().__call__(message, *args, **kwargs)
725
782
 
726
783
 
727
784
  message = MessageDialog()
@@ -854,7 +911,7 @@ class ConcurrencyDialog(UniqueDialog):
854
911
  return dialog
855
912
 
856
913
  def __call__(self, model, id_, context):
857
- res = super(ConcurrencyDialog, self).__call__()
914
+ res = super().__call__()
858
915
 
859
916
  if res == Gtk.ResponseType.OK:
860
917
  return True
@@ -932,7 +989,7 @@ class ErrorDialog(UniqueDialog):
932
989
  title = "%s: %s" % (title.__class__.__name__, title)
933
990
  details += '\n' + title
934
991
  logger.error(details)
935
- return super(ErrorDialog, self).__call__(title, details)
992
+ return super().__call__(title, details)
936
993
 
937
994
 
938
995
  error = ErrorDialog()
@@ -965,8 +1022,8 @@ def check_version(box, version=__version__):
965
1022
 
966
1023
  logger.info(_("Check URL: %s"), url)
967
1024
  try:
968
- urllib.request.urlopen(
969
- HeadRequest(url), timeout=5, cafile=rpc._CA_CERTS)
1025
+ context = ssl.create_default_context(cafile=rpc._CA_CERTS)
1026
+ urllib.request.urlopen(HeadRequest(url), timeout=5, context=context)
970
1027
  except (urllib.error.HTTPError, socket.timeout):
971
1028
  return True
972
1029
  except Exception:
@@ -977,7 +1034,7 @@ def check_version(box, version=__version__):
977
1034
  if check_version(box, version):
978
1035
  info_bar = Gtk.InfoBar()
979
1036
  info_bar.get_content_area().pack_start(
980
- Gtk.Label(label=_("A new version is available!")),
1037
+ Gtk.Label(label=_(f"A new version ({version}) is available.")),
981
1038
  expand=True, fill=True, padding=0)
982
1039
  info_bar.set_show_close_button(True)
983
1040
  info_bar.add_button(_("Download"), Gtk.ResponseType.ACCEPT)
@@ -1249,7 +1306,7 @@ def generateColorscheme(masterColor, keys, light=0.1):
1249
1306
  class RPCException(Exception):
1250
1307
 
1251
1308
  def __init__(self, exception):
1252
- super(RPCException, self).__init__(exception)
1309
+ super().__init__(exception)
1253
1310
  self.exception = exception
1254
1311
 
1255
1312
 
@@ -1556,7 +1613,7 @@ def setup_window(window):
1556
1613
 
1557
1614
  def play_sound(self, sound='success'):
1558
1615
  try:
1559
- from playsound import playsound
1616
+ from playsound3 import playsound
1560
1617
  playsound(os.path.join(SOUNDS_DIR, f'{sound}.wav'))
1561
1618
  except ImportError:
1562
1619
  pass
@@ -1574,3 +1631,18 @@ def get_gdk_backend():
1574
1631
  if 'wayland' in dm_class_name:
1575
1632
  return 'wayland'
1576
1633
  return 'x11'
1634
+
1635
+
1636
+ def get_monitor_size():
1637
+ from tryton.gui import Main
1638
+
1639
+ main_gdk_window = Main().window.get_window()
1640
+ if not main_gdk_window:
1641
+ return None, None
1642
+
1643
+ display = Gdk.Display.get_default()
1644
+ monitor = display.get_monitor_at_window(main_gdk_window)
1645
+ geometry = monitor.get_geometry()
1646
+ return (
1647
+ geometry.width / monitor.get_scale_factor(),
1648
+ geometry.height / monitor.get_scale_factor())
@@ -5,6 +5,7 @@ import decimal
5
5
  import gettext
6
6
  import io
7
7
  import locale
8
+ import math
8
9
  from collections import OrderedDict
9
10
  from decimal import Decimal
10
11
  from shlex import shlex
@@ -336,17 +337,18 @@ def format_value(field, value, target=None, context=None, _quote_empty=False):
336
337
  or isinstance(value, bool))):
337
338
  return ''
338
339
  digit = 0
339
- if isinstance(value, Decimal):
340
- cast = Decimal
341
- else:
342
- cast = float
343
- factor = cast(field.get('factor', 1))
344
- string_ = str(value * factor)
340
+ string_ = str(value)
345
341
  if 'e' in string_:
346
342
  string_, exp = string_.split('e')
347
343
  digit -= int(exp)
348
344
  if '.' in string_:
349
345
  digit += len(string_.rstrip('0').split('.')[1])
346
+ if isinstance(value, Decimal):
347
+ cast = Decimal
348
+ else:
349
+ cast = float
350
+ factor = cast(field.get('factor', 1))
351
+ digit -= round(math.log10(factor))
350
352
  return locale.localize(
351
353
  '{0:.{1}f}'.format(value * factor or 0, digit), True)
352
354
 
@@ -5,7 +5,7 @@
5
5
  class EvalEnvironment(dict):
6
6
 
7
7
  def __init__(self, parent, eval_type='eval'):
8
- super(EvalEnvironment, self).__init__()
8
+ super().__init__()
9
9
  self.parent = parent
10
10
  assert eval_type in ('eval', 'on_change')
11
11
  self.eval_type = eval_type
@@ -33,7 +33,7 @@ class EvalEnvironment(dict):
33
33
  return self.__getitem__(item)
34
34
  except KeyError:
35
35
  pass
36
- return super(EvalEnvironment, self).get(item, default)
36
+ return super().get(item, default)
37
37
 
38
38
  def __bool__(self):
39
39
  return True
@@ -2,6 +2,7 @@
2
2
  # this repository contains the full copyright notices and license terms.
3
3
  import gettext
4
4
  import locale
5
+ import math
5
6
  from decimal import Decimal, InvalidOperation
6
7
 
7
8
  from gi.repository import Gdk, GObject, Gtk
@@ -64,13 +65,18 @@ class NumberEntry(Gtk.Entry, Gtk.Editable):
64
65
  value = Decimal(locale.delocalize(text, self.monetary))
65
66
  except (ValueError, InvalidOperation):
66
67
  return position
67
- try:
68
- if (value and self.__digits is not None
69
- and (round(value, self.__digits) != value
70
- or value.as_tuple().exponent < -self.__digits)):
68
+ if self.__digits:
69
+ int_size, dec_size = self.__digits
70
+ try:
71
+ if int_size is not None and value:
72
+ if math.ceil(math.log10(abs(value))) > int_size:
73
+ return position
74
+ if dec_size is not None:
75
+ if (round(value, dec_size) != value
76
+ or value.as_tuple().exponent < -dec_size):
77
+ return position
78
+ except InvalidOperation:
71
79
  return position
72
- except InvalidOperation:
73
- return position
74
80
  length = len(new_text.encode('utf-8'))
75
81
  buffer_.insert_text(position, new_text, length)
76
82
  return position + length
@@ -11,7 +11,7 @@ from tryton.common import RPCException, RPCExecute, eval_domain
11
11
  class SelectionMixin(object):
12
12
 
13
13
  def __init__(self, *args, **kwargs):
14
- super(SelectionMixin, self).__init__(*args, **kwargs)
14
+ super().__init__(*args, **kwargs)
15
15
  self.nullable_widget = True
16
16
  self.selection = None
17
17
  self.inactive_selection = []
Binary file
@@ -5,6 +5,12 @@
5
5
  msgid ""
6
6
  msgstr "Content-Type: text/plain; charset=utf-8\n"
7
7
 
8
+ msgid "Make this an _internal message"
9
+ msgstr ""
10
+
11
+ msgid "Send"
12
+ msgstr ""
13
+
8
14
  msgid "specify alternate config file"
9
15
  msgstr "укажете друг конфигурационен файл"
10
16
 
@@ -133,9 +139,6 @@ msgstr ""
133
139
  msgid "Unable to check for new version."
134
140
  msgstr ""
135
141
 
136
- msgid "A new version is available!"
137
- msgstr ""
138
-
139
142
  msgid "Download"
140
143
  msgstr ""
141
144
 
@@ -659,9 +662,6 @@ msgstr "Прикачен файл:"
659
662
  msgid "Files"
660
663
  msgstr ""
661
664
 
662
- msgid "Send"
663
- msgstr ""
664
-
665
665
  #, fuzzy
666
666
  msgid "Select File"
667
667
  msgstr "Избор"
@@ -888,6 +888,13 @@ msgstr ""
888
888
  msgid "Add a note to the record"
889
889
  msgstr ""
890
890
 
891
+ msgid "C_hat"
892
+ msgstr ""
893
+
894
+ #, fuzzy
895
+ msgid "Chat on the record"
896
+ msgstr "Създаване на нов запис"
897
+
891
898
  msgid "_Actions..."
892
899
  msgstr "Действия..."
893
900
 
@@ -1015,11 +1022,9 @@ msgstr ""
1015
1022
 
1016
1023
  #, fuzzy, python-format
1017
1024
  msgid "%d record saved."
1018
- msgstr "%d заспис съхранен!"
1019
-
1020
- #, fuzzy, python-format
1021
- msgid "%d records saved."
1022
- msgstr "%d записа съхранени!"
1025
+ msgid_plural "%d records saved."
1026
+ msgstr[0] "%d заспис съхранен!"
1027
+ msgstr[1] "%d заспис съхранен!"
1023
1028
 
1024
1029
  msgid "Export failed"
1025
1030
  msgstr ""
@@ -1103,11 +1108,9 @@ msgstr ""
1103
1108
 
1104
1109
  #, fuzzy, python-format
1105
1110
  msgid "%d record imported."
1106
- msgstr "%d запис вмъкнат!"
1107
-
1108
- #, fuzzy, python-format
1109
- msgid "%d records imported."
1110
- msgstr "%d записи вмъкнати!"
1111
+ msgid_plural "%d records imported."
1112
+ msgstr[0] "%d запис вмъкнат!"
1113
+ msgstr[1] "%d запис вмъкнат!"
1111
1114
 
1112
1115
  msgid "Search"
1113
1116
  msgstr "Търсене"
@@ -1186,6 +1189,9 @@ msgstr "Запис като"
1186
1189
  msgid "Image size too large."
1187
1190
  msgstr "Размера на изображението е много голям!"
1188
1191
 
1192
+ msgid "Reset Column Widths"
1193
+ msgstr ""
1194
+
1189
1195
  msgid "Copy"
1190
1196
  msgstr ""
1191
1197
 
@@ -1266,6 +1272,10 @@ msgstr "Всички файлове"
1266
1272
  msgid "Show plain text"
1267
1273
  msgstr "Показване само на текст"
1268
1274
 
1275
+ #, python-format
1276
+ msgid "Select a color for \"%s\""
1277
+ msgstr ""
1278
+
1269
1279
  msgid "Add value"
1270
1280
  msgstr ""
1271
1281
 
Binary file
@@ -6,6 +6,12 @@
6
6
  msgid ""
7
7
  msgstr "Content-Type: text/plain; charset=utf-8\n"
8
8
 
9
+ msgid "Make this an _internal message"
10
+ msgstr ""
11
+
12
+ msgid "Send"
13
+ msgstr "Envia"
14
+
9
15
  msgid "specify alternate config file"
10
16
  msgstr "Indica un fitxer de configuració alternatiu"
11
17
 
@@ -128,9 +134,6 @@ msgstr "URL de comprovació: %s"
128
134
  msgid "Unable to check for new version."
129
135
  msgstr "No s'ha pogut comprovar si existeix una nova versió."
130
136
 
131
- msgid "A new version is available!"
132
- msgstr "Hi ha una nova versió disponible!"
133
-
134
137
  msgid "Download"
135
138
  msgstr "Baixa"
136
139
 
@@ -623,9 +626,6 @@ msgstr "Adjunts"
623
626
  msgid "Files"
624
627
  msgstr "Fitxers"
625
628
 
626
- msgid "Send"
627
- msgstr "Envia"
628
-
629
629
  msgid "Select File"
630
630
  msgstr "Selecciona un fitxer"
631
631
 
@@ -832,6 +832,13 @@ msgstr "_Notes..."
832
832
  msgid "Add a note to the record"
833
833
  msgstr "Afegeix una nota al registre"
834
834
 
835
+ msgid "C_hat"
836
+ msgstr ""
837
+
838
+ #, fuzzy
839
+ msgid "Chat on the record"
840
+ msgstr "Afegeix una nota al registre"
841
+
835
842
  msgid "_Actions..."
836
843
  msgstr "_Accions..."
837
844
 
@@ -948,13 +955,11 @@ msgstr "Quin és el nom d'aquesta exportació?"
948
955
  msgid "Override '%s' definition?"
949
956
  msgstr "Voleu sobreescriure la definició de '%s'?"
950
957
 
951
- #, python-format
958
+ #, fuzzy, python-format
952
959
  msgid "%d record saved."
953
- msgstr "S'ha desat %d registre."
954
-
955
- #, python-format
956
- msgid "%d records saved."
957
- msgstr "S'han desat %d registres."
960
+ msgid_plural "%d records saved."
961
+ msgstr[0] "S'ha desat %d registre."
962
+ msgstr[1] "S'ha desat %d registre."
958
963
 
959
964
  msgid "Export failed"
960
965
  msgstr "Ha fallat l'exportació"
@@ -1033,13 +1038,11 @@ msgstr "Error"
1033
1038
  msgid "Import failed"
1034
1039
  msgstr "Ha fallat la importació"
1035
1040
 
1036
- #, python-format
1041
+ #, fuzzy, python-format
1037
1042
  msgid "%d record imported."
1038
- msgstr "S'ha importat %d registre."
1039
-
1040
- #, python-format
1041
- msgid "%d records imported."
1042
- msgstr "S'han importat %d registres."
1043
+ msgid_plural "%d records imported."
1044
+ msgstr[0] "S'ha importat %d registre."
1045
+ msgstr[1] "S'ha importat %d registre."
1043
1046
 
1044
1047
  msgid "Search"
1045
1048
  msgstr "Cerca"
@@ -1111,6 +1114,10 @@ msgstr "Anomena i desa"
1111
1114
  msgid "Image size too large."
1112
1115
  msgstr "La mida de la imatge és massa gran."
1113
1116
 
1117
+ #, fuzzy
1118
+ msgid "Reset Column Widths"
1119
+ msgstr "Guarda l'ample de la columna"
1120
+
1114
1121
  msgid "Copy"
1115
1122
  msgstr "Copia"
1116
1123
 
@@ -1189,6 +1196,10 @@ msgstr "Tots els fitxers"
1189
1196
  msgid "Show plain text"
1190
1197
  msgstr "Mostra com a text pla"
1191
1198
 
1199
+ #, fuzzy, python-format
1200
+ msgid "Select a color for \"%s\""
1201
+ msgstr "Seleccioneu un color"
1202
+
1192
1203
  msgid "Add value"
1193
1204
  msgstr "Afegeix un valor"
1194
1205
 
Binary file
@@ -5,6 +5,12 @@
5
5
  msgid ""
6
6
  msgstr "Content-Type: text/plain; charset=utf-8\n"
7
7
 
8
+ msgid "Make this an _internal message"
9
+ msgstr ""
10
+
11
+ msgid "Send"
12
+ msgstr ""
13
+
8
14
  msgid "specify alternate config file"
9
15
  msgstr "zadejte alternativní konfigurační soubor"
10
16
 
@@ -133,9 +139,6 @@ msgstr ""
133
139
  msgid "Unable to check for new version."
134
140
  msgstr ""
135
141
 
136
- msgid "A new version is available!"
137
- msgstr ""
138
-
139
142
  msgid "Download"
140
143
  msgstr ""
141
144
 
@@ -664,9 +667,6 @@ msgstr "Příloha:"
664
667
  msgid "Files"
665
668
  msgstr ""
666
669
 
667
- msgid "Send"
668
- msgstr ""
669
-
670
670
  #, fuzzy
671
671
  msgid "Select File"
672
672
  msgstr "Výběr"
@@ -899,6 +899,13 @@ msgstr ""
899
899
  msgid "Add a note to the record"
900
900
  msgstr ""
901
901
 
902
+ msgid "C_hat"
903
+ msgstr ""
904
+
905
+ #, fuzzy
906
+ msgid "Chat on the record"
907
+ msgstr "Vytvořit nový záznam"
908
+
902
909
  msgid "_Actions..."
903
910
  msgstr "Akce..."
904
911
 
@@ -1028,11 +1035,10 @@ msgstr ""
1028
1035
 
1029
1036
  #, fuzzy, python-format
1030
1037
  msgid "%d record saved."
1031
- msgstr "%d záznam uložen!"
1032
-
1033
- #, fuzzy, python-format
1034
- msgid "%d records saved."
1035
- msgstr "%d záznamů uloženo!"
1038
+ msgid_plural "%d records saved."
1039
+ msgstr[0] "%d záznam uložen!"
1040
+ msgstr[1] "%d záznam uložen!"
1041
+ msgstr[2] "%d záznam uložen!"
1036
1042
 
1037
1043
  msgid "Export failed"
1038
1044
  msgstr ""
@@ -1120,11 +1126,10 @@ msgstr ""
1120
1126
 
1121
1127
  #, fuzzy, python-format
1122
1128
  msgid "%d record imported."
1123
- msgstr "%d záznam načten!"
1124
-
1125
- #, fuzzy, python-format
1126
- msgid "%d records imported."
1127
- msgstr "%d záznamů načteno!"
1129
+ msgid_plural "%d records imported."
1130
+ msgstr[0] "%d záznam načten!"
1131
+ msgstr[1] "%d záznam načten!"
1132
+ msgstr[2] "%d záznam načten!"
1128
1133
 
1129
1134
  msgid "Search"
1130
1135
  msgstr "Hledat"
@@ -1201,6 +1206,9 @@ msgstr "Uložit jako"
1201
1206
  msgid "Image size too large."
1202
1207
  msgstr "Rozměry obrázku jsou příliš velké!"
1203
1208
 
1209
+ msgid "Reset Column Widths"
1210
+ msgstr ""
1211
+
1204
1212
  msgid "Copy"
1205
1213
  msgstr ""
1206
1214
 
@@ -1281,6 +1289,10 @@ msgstr "Všechny soubory"
1281
1289
  msgid "Show plain text"
1282
1290
  msgstr ""
1283
1291
 
1292
+ #, python-format
1293
+ msgid "Select a color for \"%s\""
1294
+ msgstr ""
1295
+
1284
1296
  msgid "Add value"
1285
1297
  msgstr ""
1286
1298
 
Binary file